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将真正开始有回报。只是这一行已经有了更短更干净的语法。