2011-07-11 108 views
3

我創建一個Chrome擴展程序追加script標籤頁,然後使用該外部腳本定義代碼:Chrome擴展:注射外部腳本

$('body').append('<script src="..."></script><script>console.log(SomeObject)</script>'); 

SomeObject在外部腳本中定義,所以我應該可以訪問它,對吧?那麼,我不能,因爲我得到一個「未定義」的錯誤。

我甚至嘗試使用head.js加載外部腳本並在加載腳本後執行一個函數,但無濟於事。

如果我打開Chrome控制檯,我可以訪問該死的對象就好!

我試了一個內容腳本和executeScript內的背景頁面無濟於事。在兩者上,如果我使用console.log(window),我可以檢查控制檯中的window對象,並且無法找到SomeObject。如果我檢查Chrome控制檯上的window對象,那就是!

被注入的腳本sandboxed不知何故或什麼給?

謝謝!

回答

1

如此看來,答案是你不能,由於安全限制:(

我不得不通過使用iframe(奇怪的是,iframe可以訪問其父文檔)繞過它。

1

我敢打賭,腳本只是當你調用它的時候沒有加載,這是否工作:

<script src="..."></script><script>setTimeout(function() {console.log(SomeObject)}, 3000)</script> 
+0

我也這麼認爲,這就是爲什麼我嘗試使用'head.js'。但我也嘗試了你的建議,它仍然不會工作:( – Ivan

2

這是最後的工作:

var script = document.createElement('script'); 
script.src = "..."; 
script.addEventListener('load', function() { 
    // SomeObject is available!!! 
}); 
document.head.appendChild(script); 

我不知道爲什麼沒有的其他方法工作...

+0

說太快...它隨機工作... – Ivan