2011-03-06 89 views
3

我有這個腳本的Gmail。它運行在iframe的canvas_frame內。
我想使用parent.document來獲取父文檔的句柄。但在Chrome中告訴我,它是未定義的。在Firefox中可以正常工作,但在Chrome上會出現問題。
那麼,我如何在Chrome中從iframe中獲取父文檔的句柄。
Chrome的版本:11.0.686.3鉻iframe父母未定義

這裏是一個的失敗代碼:

function init() { 
    try { 
     if(parent == null) { 
      console.log(typeof parent); 
      window.setTimeout(init, 200); 
      return; 
     } 
     // SOME MORE STUFF 
    } catch(e) { console.log(e) } 
} 

這部分只是在日誌窗口輸出undefined不休。
這是一個測試腳本,可以產生相同的結果。它不斷地輸出undefinedcQ

// ==UserScript== 
// @name   TEST SCRIPT FOR CHROME 
// @version  1.0 
// @namespace  1nfected 
// @description TEST 
// @include  http://mail.google.com/* 
// @include  https://mail.google.com/* 
// ==/UserScript== 

(function() { 
if(document.documentElement.className != 'cQ') { 
    console.log('not our frame'); 
    return; 
} 
function init() { 
    if(window.parent == null) { 
     console.log(typeof window.parent); 
     console.log(document.documentElement.className); 
     window.setTimeout(init, 1000); 
     return; 
    } 
    console.log('Found the parent'); 
} 
init(); 
})(); 

回答

0

我終於意識到,在谷歌Chrome,userscripts被剝奪window.parent訪問。
只有當我將腳本注入網頁時,它纔會起作用。

+0

那,使用內容腳本會更好,因爲你得到了完全控制(有點)。 – 2011-03-16 00:07:55

+0

我做了一點閱讀最終也發現,在code.google.com對此提起了問題。我認爲內容腳本也不會有任何好處。 – 1nfected 2011-03-21 14:55:01

4

UserScripts在Chrome是有限的,尤其是當它涉及到I幀。

爲什麼你不能以其他方式做到這一點?例如:

var frame = document.getElementById('canvas_frame'); 
if (frame) { 
    var dom = frame.contentDocument; 
} 

這裏更好的答案是Chrome Extensions,你將有一個Content Script,而不是用戶腳本更多的控制。

+0

這就是我一直這樣做到現在爲止。但是幾天後,這種方法一直在起作用。 dom(frame.contentDocument)對象不會返回任何東西。當我切換到我目前的方法後,它開始再次工作100%,但僅在Firefox中不幸。尚未測試Opera。 – 1nfected 2011-03-06 19:18:59

+0

如果出現問題,請提交一個錯誤報告並放置一個小型縮減測試用例。由於我鉻貢獻,我將它類選,並將其分配給適當的開發者。 – 2011-03-16 00:09:23

+0

我不知道,但是這可能會在這方面提出的問題:爲什麼我說在Chrome用戶腳本被限制http://code.google.com/p/chromium/issues/detail?id=20773 – 1nfected 2011-03-21 14:58:11