-1

假设我有一个基于框架的网页,它看起来像这样:

+-------------+---------------------------------------------------------+
|             |           header                                        |
|             +---------------------------------------------------------+
|             |                                                         |
|             |                                                         |
|             |                                                         |
|             |                                                         |
|             |                                                         |
|             |           main                                          |
| menu        |                                                         |
|             |                                                         |
|             |                                                         |
|             |                                                         |
|             |                                                         |
|             |                                                         |
|             |                                                         |
|             |                                                         |
|             |                                                         |
|             |                                                         |
|             +---------------------------------------------------------+
|             |           footer                                        |
+-------------+---------------------------------------------------------+

如您所见,有一个名为main. 当用户单击框架中的菜单项时menu,可以在框架中加载任何页面(任何 URL)mainmain现在我想要的是在框架中加载的页面中运行一段代码。正如我所描述的,将在main框架中加载的页面没有 URL 模式,因此我无法在greasemonkey脚本中指定模式。有没有办法做到这一点?

谢谢。

4

1 回答 1

0

问题不清楚。如果您指的是老式(在 HTML5 中已过时)框架集,例如:

<frameset ...>
    <frame name="header" src="header.htm"           ></frame>
    <frame name="menu"   src="menu.htm"             ></frame>
    <frame name="main"   src="ANY_DOMAIN/page.htm"  ></frame>
    <frame name="footer" src="footer.htm"           ></frame>
</frameset>

,那么您必须将 Greasemonkey 脚本设置为在“主”框架中可能打开的所有可能页面上触发。

这是一种方法:

// ==UserScript==
// @name     _Fire on any page, but only when it is the frame named "main"
// @include  *
// ==/UserScript==

//-- Run in (i)framed page only, not in parent page.
if (window.top != window.self) {
    if (window.name == "main") {

        // PLACE YOUR DESIRED CODE HERE.
    }
}

重要的:

  1. @include *仅作为最后手段使用。尽可能调整您的@include@exclude和语句,使其仅在您希望加载到名为“main”的框架中的页面上运行。@match
  2. 如果这些框架都是同一个域,那么你有更多的选择。您可以只运行框架集页面并根据需要将代码注入框架。为此打开一个新问题。
  3. 在 Firefox 中使用 4.01 版 DOCTYPE 进行测试。其他浏览器和 HTML5 可能不同或不可能。
于 2013-09-30T07:15:23.230 回答