有没有办法通过Greasemonkey在命名框架(而不是所有框架)中运行我的JS代码?

时间:2013-09-30 05:50:14

标签: javascript frame greasemonkey

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

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

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

感谢。

1 个答案:

答案 0 :(得分: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@match语句,只在您希望加载到名为“main”的框架中的页面上运行。
  2. 如果这些框架都是 同一个域 ,那么您有更多选择。您可以运行om frameset page并根据需要将代码注入到框架中。为此打开一个新问题。
  3. 在Firefox中使用版本4.01 DOCTYPE进行测试。其他浏览器和HTML5可能不同或不可能。