使用 Microsoft Visual Basic 访问 FrontPage 框架集

   

框架是站点设计中的一个重要部分。Microsoft FrontPage 支持对框架内容进行编程。单击下列链接之一可获得有关某个特定主题的详细内容。

探索框架

框架集的作用

访问 HTML 标记

动态框架资源

在网页窗口中的所有框架间循环

将 Meta 标记的内容更改为另一个字符集

探索框架

在 FrontPage 中访问框架集中的框架相对简单,只要您记住每个框架访问其本身的网页并且您是通过 Page 对象模型来访问每个网页的内容的。显示框架所涉及到的两个窗口分别为 PageWindowEx 对象和 FPHTMLWindow2 对象。访问与当前框架相关联的窗口的内容所用的等价表达式为 Set myActiveFrameInFrameset = ActivePageWindow.DocumentActivePageWindow 对象访问框架的网页窗口,Document 对象访问 FPHTMLWindow2 对象。

注意  如果尝试在“HTML”视图中访问对象,则会得到权限拒绝错误。向文档对象添加代码或文本时,必须将 ViewMode 属性的 FpPageViewMode 常数设置为 fpPageViewNormal。视图模式的值不能设置为 fpPageViewHtmlfpPageViewPreview。此外,在 FrontPage 用户界面 (UI) 中,您不能在“网页”视图下打开“HTML”选项卡或“预览”选项卡。

框架集的作用

框架集是 Web 窗口中所有框架的容器。每个框架都包含在一个单独的网页窗口中,并且有一个单独的网页与其相关联。通过访问 Web 对象模型的 FrameWindow 对象,可以访问包含框架网页文档的 FPHTMLWindow2 对象。从这些对象您可以访问框架集的窗口、文档和框架。在下列语句中,

myFrameset
是一个返回框架网页文档的 FPHTMLWindow2 对象。从这个对象里您可以访问 <FRAME> 和 <FRAMESET> 标记、窗口或文档对象。
Set myFrameset = ActivePageWindow.FrameWindow

此语句通过 Page 对象模型返回一个 FPHTMLWindow2 对象。使用 myFramesetDocument 属性访问网页的 Page 对象模型等价于在 FrontPage 的“网页”视图下访问框架网页的“HTML”选项卡。

注意  框架网页的“HTML”和“无框架”选项卡只有在当前网页有框架时是有用的。

访问 HTML 标记

通过将对象声明为 FPHTMLFrameElement 对象,可以访问 <FRAME> 框架标记所能访问的信息。该对象可用的某些属性和方法包括 borderborderColorclickframeBorderframeSpacinginnerHTMLinnerTextinsertAdjacentHTMLinsertAdjacentText

Dim myFramesElements() As FPHTMLFrameElement

您可以通过声明一个 FPHTMLFramesetSite 对象来访问框架集标记的信息。

Dim myFramesetSite As FPHTMLFramesetSite

动态框架资源

您可以使用下列语句在 HTML 代码中动态地更改框架资源。该代码将框架资源设置为新的 URL,Inventory_1stQuarter.htm。

Dim myDoc As Object

Set myDoc = ActivePageWindow.FrameWindow.Document

myDoc.all.tags("frame").Item(0).src = _
    "Inventory_1stQuarter.htm"

对网页窗口中全部的框架进行循环

若要访问存放在特定框架网页中的框架集组件的属性,必须通过 Document 属性访问 DispFPHTMLDocument 对象。下列示例对 Microsoft FrontPage 中当前框架集合中的框架集和框架组件进行循环。框架集数组 (myFSElements) 包含框架网页上的每个 <FRAMESET> 标记。框架数组 (myFramesElements) 包含框架网页上的每个 <FRAME> 标记。框架窗口数组 (myFramesWindows) 包含指向每个框架的所有 FPHTMLWindow2 对象。通过对数组所对应的标记或对象进行循环,可填充每个数组。一旦填充数组,您就可以将框架集组件的 frameSpacing 属性更改为“10”,将 borderColor 属性更改为“red”,同时更改文档中的各种其他属性。

Private Sub AccessFramesPage()
Dim myFPWindow As FPHTMLWindow2
Dim myFSElements() As IHTMLFrameSetElement
Dim myFramesWindows() As FPHTMLWindow2
Dim myFramesElements() As FPHTMLFrameElement
Dim myStyle As FPHTMLStyle
Dim i As Integer

Set myFPWindow = ActivePageWindow.FrameWindow
ReDim myFSElements(myFPWindow.Document.all.tags("FRAMESET").length)
ReDim myFramesElements(myFPWindow.Document.all.tags("FRAME").length)
ReDim myFramesWindows(myFPWindow.frames.length)

For i = 0 To UBound(myFSElements)
    Set myFSElements(i) = _
        myFPWindow.Document.all.tags("FRAMESET").Item(i)
Next i

i = 0
For i = 0 To UBound(myFramesWindows)
    Set myFramesWindows(i) = myFPWindow.frames(i)
Next i

i = 0
For i = 0 To UBound(myFramesElements)
    Set myFramesElements(i) = _
        myFPWindow.Document.all.tags("FRAME").Item(i)
Next i

myFSElements(0).frameSpacing = "10"
myFramesElements(0).borderColor = "red"

With myFramesWindows(2).Document
    .bgColor = "green"
    .body.innerHTML = "<p id=""cool""> Added by FP Programmability"
    Set myStyle = .all.cool.style
        myStyle.backgroundColor = "white"
        myStyle.display = False
        myStyle.textDecorationUnderline = True
        myStyle.Font = "Tahoma, 24"
        myStyle.fontStyle = "italic"
End With
End Sub

将 Meta 标记内容更改为另一个字符集

您可以将全部的内容类型的 META 标记更改为另一个字符集(中欧),如以下代码示例所示。当前字符集显示在“语言设置”对话框中(网页属性中可用)。

注意  整个内容类型 META 标记包含与以下字符串类似的字符串:

content = "text/html; charset = windows-1252"

字符集为“windows-1252”,也是“英语(美国)”的默认字符集。

每当应用程序重复一个循环,您访问 frameWindow 对象中下一个框架,就象连续访问每一个 HTML 的框架标记一样。然而,Frames 集合并不支持 For... each 架构。您不能通过其名称来访问 HTTP-EQUIV 类型的 meta 标记;而必须如下述示例引用一个索引。以 myContentType.Content 开头的表达式将字符集设置为 Central European。

注意  FrontPage 设置 <META> 标记零 (0) 中的内容类型。

Private Sub ChangeCharSet()
    Dim myFrames As IHTMLFramesCollection2
    Dim myFrame As FPHTMLWindow2
    Dim myHTTPEquiv As String
    Dim myContentType As Object
    Dim myCount As Integer

    Set myFrames = ActivePageWindow.FrameWindow.frames
    Set myFrame = ActivePageWindow.FrameWindow.frames(0)
    myHTTPEquiv = 0

    For myCount = 0 To myFrames.Length - 1
        Set myFrame = myFrames(myCount)
        Set myContentType = _
            myFrame.Document.all.tags("meta").Item(myHTTPEquiv)
        myContentType.content = _
            "text/html; charset=iso-8859-2"
    Next myCount
End Sub