2011-11-26 33 views
1

我用了一個網站,看起來像這樣的身體:使用Greasemonkey的一類添加到一個iframe

... 
    <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> 
    ... 

我沒有自己的域名,我只是想'重新混合'web內容。

我嘗試這樣的東西:

// ==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,警報變爲空,或根本不顯示。

我在做什麼錯?

編輯:不知道這與它有什麼關係,但我忘了告訴其實有2個iframe:一個被Adblocker阻止,這就是爲什麼我之前沒有提到過這個。

+0

此問題中的示例GM腳本使用jQuery 1.2.6版。希望這是一個錯字;建議您使用jQuery版本1.6.2。 –

+0

這可能是因爲在執行greasemonkey時尚未加載框架,因此等待iframe的加載可能會有所幫助。 – Kornel

回答

3

在Greasemonkey的它真的很容易。 GM腳本將在iFrame上觸發,就像在包含頁面上一樣。

所以,如果你創建一個通用汽車這樣的腳本:

// ==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腳本來完成所有任務,但如果您不小心,可能會變得棘手。現在保持簡單。

+0

足夠奇怪類'classname2'沒有出現在iframe的body元素,使用螢火蟲查看時,但它DID在平均身體標籤。 – user361191

+0

呵呵,好像我弄亂了包含的語法,我解決了這個問題,它就像一個魅力。非常感謝! – user361191

+0

'document.body.className + ='classname2';'。你不必使用jQuery來處理* everything *,真的。 – Kornel

0

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

+0

erimerturk,這似乎並沒有爲我工作。 – user361191

+0

是什麼問題? – erimerturk

+0

直接運行它什麼都沒做。在調試時,alert($ c.find('body'));根本沒有迴應,但警報($ c)DID迴應。 – user361191

相關問題