2012-12-20 60 views
1

我正在寫一個chrome擴展,它向內容腳本中的網站注入div。內容腳本向我在manifest.json文件中清除的網站發出AJAX請求,並使用innerHTML將數據插入到div中。部分AJAX請求返回的是需要執行的javascript。內容腳本中的AJAX請求正常工作。在Chrome擴展中使用AJAX執行JavaScript檢索

當我從常規網站發出相同的AJAX請求時,返回的JavaScript執行得很好,但是當我從內容腳本發出AJAX請求時,它不會執行。控制檯中不顯示任何錯誤。如果可能,我不想重新加載網站。

我認爲這是一個安全「功能」,而不是一個錯誤。我怎樣才能關閉或規避這種行爲?

+0

請嘗試:http://developer.chrome.com/extensions/contentSecurityPolicy.html – HaNdTriX

+0

@HaNdTriX不適用於內容腳本。 –

+1

@DudeOnRock您是否知道內容腳本的執行上下文與頁面的執行上下文之間的區別? –

回答

0

首先,Rob W說的非常重要,如果您還不知道它,對內容腳本運行的不同環境的一個很好的解釋很有用。

您可能想檢查this了。這不是100%你正在尋找,但主要部分在那裏。基本上從你的背景頁面(如果你還沒有創建一個),你可以使用chrome.tabs.executeScript()來執行你下載的腳本。它在真實頁面上下文中運行JavaScript,而不是「內容腳本」上下文。您現在需要的只是將該腳本(以字符串形式)提供給後臺頁面,並確定要執行的腳本(來自發件人選項卡)

您可以使用chrome.extension.sendMessage將其發送到後臺頁面,在background.js中,使用chrome.extension.onMessage通過腳本接收消息。從那裏使用sender參數來獲取tabId(sender.tab.id),並構建你的executeScript調用。

還有一個有用的提示,在默認情況下,Chrome瀏覽器網頁腳本(動態JavaScript執行)沒有在Chrome調試任何一組的方式顯示出來,但可以追加像這樣你的JavaScript字符串: "\n//@ sourceURL=/myFolder/myDynamicJavascript.js"

這將使該腳本始終顯示爲chrome調試器的「/myFolder/myDynamicJavascript.js」路徑,允許您在已插入的js代碼中設置斷點。這是一個救生員。

+0

默認情況下,chrome中的頁面腳本(動態javascript執行)是什麼意思,在chrome調試器中沒有以任何設置的方式顯示?你是指內容腳本說他們不在調試器中? – Sudarshan

+0

內容腳本在manifest.json中定義時顯示在調試器中,但在使用代碼塊(例如'chrome.tabs.executeScript(null,{code:「my_code_here」});'時,它們不會顯示除非你添加'// @ sourceURL = ...'行。 – Scott