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

Javascript 使用Greasemonkey将类添加到iframe的主体中,javascript,jquery,greasemonkey,Javascript,Jquery,Greasemonkey,我使用的网站如下所示: ... <body> <iframe src="blabla/blabla..."></iframe> </body> ... ... <body> <iframe src="blabla/blabla..."> ... <body class="classname "> ... </b

我使用的网站如下所示:

    ...
    <body>
    <iframe src="blabla/blabla..."></iframe>
    </body>
    ...
    ...
    <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);

    });
// ==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');
问题在于:如果我可以在第二个主体中添加第二个类名,那么该站点将更容易查看,如下所示:

    ...
    <body>
    <iframe src="blabla/blabla..."></iframe>
    </body>
    ...
    ...
    <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);

    });
// ==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');
他们的想法是使用

document.getElementById('frameid').contentDocument.document.getElementsByTagName('body')[0].addClass('classname2')
但它不起作用。使用
contentwindow
尝试了相同的操作,但没有再次尝试。警报告诉我指定了一个元素:
[object HTMLDocument]
,但当我键入超出该元素的任何内容时,例如
.document
,警报将变为空,或者根本不会显示

我做错了什么


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

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

在Greasemonkey中,这真的很简单。GM脚本将在iFrame上启动,就像在包含页面上一样

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

    ...
    <body>
    <iframe src="blabla/blabla..."></iframe>
    </body>
    ...
    ...
    <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);

    });
// ==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脚本即可完成所有操作,但如果您不小心,这可能会变得棘手。暂时保持简单。

直接运行它没有任何效果。调试时发出警报($c.find('body');根本没有响应,但是警报($c)有响应。警报($c)给我“[object]”警报($('iframe').contents());火,其他一切都没有。(我试过了,内容之间有没有点()在这个问题中,示例GM脚本使用jQuery版本1.2.6。希望这是一个输入错误;建议您使用jQuery版本1.6.2。这可能是因为在greasemonkey执行时框架还没有加载,所以等待iframe的onload可能会有所帮助。奇怪的是,类“classname2”没有出现在body ele中当使用firebug查看时,iframe被删除,但它在mean body标记中被删除了。哦,看起来我把include的语法搞乱了,我修复了它,它工作起来很有魅力。非常感谢!
document.body.className+='classname2';
。你不必对所有事情都使用jQuery,真的。@porenel:是的,但我假设脚本确实如此,或者会做更多的事情——然后jQuery将真正开始有回报。只是这一行已经有了更短更干净的语法。