使用Greasemonkey将类添加到iframe的主体

时间:2011-11-26 15:18:04

标签: javascript jquery greasemonkey

我使用的网站看起来像这样:

    ...
    <body>
    <iframe src="blabla/blabla..."></iframe>
    </body>
    ...

iframe从同一个域加载不同的HTML文件;它拥有自己的身体

在Firebug中,它看起来像这样:

    ...
    <body>
    <iframe src="blabla/blabla...">
    ...
    <body class="classname ">
    ...
    </body>
    </iframe>
    </body>
    ...

问题在于:如果我可以向第二个主体添加第二个类名,那么该网站将更容易查看,如下所示:

    ...
    <body>
    <iframe src="blabla/blabla...">
    ...
    <body class="classname classname2">
    ...
    </body>
    </iframe>
    </body>
    ...

我不拥有域名,我只想“重新混合”网络内容。

我试过这样的东西:

    // ==UserScript==
    // @name           descr
    // @namespace      http://localhost
    // @description    descr
    // @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
    // @include        http://web.site/sub.ab*
    // ==/UserScript==

    $("iframe").load(function(){
    alert(document.getElementById('frameid').contentDocument);

    });

他们的想法是使用

document.getElementById('frameid').contentDocument.document.getElementsByTagName('body')[0].addClass('classname2')

但它不起作用。使用contentwindow尝试了同样的事情。警告告诉我有一个指定的元素:[object HTMLDocument]但是当我输入除此之外的任何内容时,如.document警报变空,或者根本不会显示。

我做错了什么?

编辑:不确定这是否与此有关,但我忘了告诉实际上有两个iframe:一个被Adblocker阻止,这就是为什么我之前没有提到这个

2 个答案:

答案 0 :(得分:3)

在Greasemonkey中,它非常简单。 GM脚本将在iFrame上触发,就像在包含页面上一样。

因此,如果您创建一个第二个 GM脚本,如下所示:

// ==UserScript==
// @name            descr, iFrame handler
// @require         http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.js
// @include         http://IFRAME_SITE.COM/blabla/blabla...
// ==/UserScript==

$("body").addClass ('classname2');

它可以毫不费力地工作。

请注意,您只需使用一个GM脚本即可完成所有操作,但如果您不小心,这可能会变得棘手。保持简单,暂时。

答案 1 :(得分:0)

$('iframe').contents()find('body').addClass('className2');