3

問題是:我需要對某個主機(例如alexa.com)執行AJAX請求。在Chrome中一切都很好,但是在Firefox中,我收到了狀態爲200的空虛。我認爲,這是因爲同源策略 - 但我發現Firefox插件可以做這樣的請求,但不是來自「內容腳本」。我無法理解,如何將此請求轉換爲「非內容腳本」並將響應返回給「內容腳本」。Firefox插件中的內容腳本和跨域請求

謝謝。

UPD:我發現如何將信息傳遞給內容腳本 - port.emit()正常工作。現在仍然存在問題 - 如何從插件腳本執行AJAX。

var Request = require("request").Request; 
    Request({ 
     url: "http://*****" + url, 
     onComplete: function (response) { 
      worker.port.emit('message', response); 
     } 
    }).get(); 

似乎沒有工作 - content-script沒有收到任何迴應。對不起,我還不確定如何將錯誤消息發送到控制檯。另外,有沒有辦法使它非異步?

UPD2:我仍然不知道如何使請求工作。我試圖從內容腳本請求警報錯誤,它似乎不是「同根同源」實際上是:

{ 
    "readyState": 0, 
    "status": 0, 
    "statusText": "[Exception... \"Failure\" nsresult: \"0x80004005 (NS_ERROR_FAILURE)\" location: \"JS frame :: resource://jid0-alfzkx8ttazxkergga4i8vsf5re-at-jetpack/api-utils/lib/loader.js -> resource://jid0-alfzkx8ttazxkergga4i8vsf5re-at-jetpack/api-utils/lib/sandbox.js -> resource://jid0-alfzkx8ttazxkergga4i8vsf5re-at-jetpack/api-utils/lib/content/content-proxy.js :: <TOP_LEVEL> :: line 106\" data: no]" 
} 

UPD3:好的,我知道了 - 這是因爲Firefox的完全禁止從內容的任何請求腳本。 UPD4:我曾嘗試與

var Request = require("request").Request; 
worker.port.emit('message', Request); 

顯示請求,並沒有返回 - 看來,與請求模塊的問題(或如何納入該模塊的方式)。純XMLHttpRequest也不起作用。 UPD5:隨着最新的SDK的console.log(response.toSource())返回空對象:

info: test3: Response:({}) 

回答

2

的問題是非常愚蠢的,確實是 - 使用response.text而不僅僅是 「反應」。