我使用的网站看起来像这样:
...
<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阻止,这就是为什么我之前没有提到这个
答案 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');