2011-08-12 52 views
1

在我的擴展中,我創建Access Level爲「All」,並且我也爲每個域添加了白名單http://*/*使用XMLHttpRequest進行Safari擴展編碼

而且我按照我的JS文件(如運行腳本結束)代碼:

var feedbackmsg = "message goes here"; 
var xmlhttp = new XMLHttpRequest(); 

xmlhttp.open('POST', 'http://mysitename.com/feedback.php', true); 
xmlhttp.onreadystatechange = handleServerResponse; 
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
xmlhttp.send("html=" + feedbackmsg); 

function handleServerResponse() {  
    if (xmlhttp.readyState == 4) { 
     alert(xmlhttp.getAllResponseHeaders()); 
     if (xmlhttp.status == 200) { 
      alert("send"); 
     } else { 
      alert("error"); 
     } 
    } 
} 

每當我運行它,我得到的警告對話框以及錯誤警告信息沒有標題迴應。我該如何解決這個問題?

回答

2

不管它是否是擴展名,我認爲XMLHttpRequest(如果注入頁面)不允許訪問頁面當前域外的任何內容。控制檯只是說這個請求被取消了。至少,當我測試它時,情況就是這樣。 (當我測試時,我沒有白名單或黑名單中的任何網址,但Access選項設置爲「全部」。)

您可以嘗試轉到與要「調用」的域相同的域,在代碼中使用XHR對象,然後查看它是否成功。如果是這樣,你會知道這是因爲頁面的域名和XHR請求必須匹配。

但是,看起來你可以從擴展的全局頁面(非常奇怪)執行跨站點ajax請求。至少它現在似乎適用於我。這實際上有點可怕(我寧願它是更多難以從擴展中調用隨機服務器),但它的工作。

不知道是否可以幫助你。

+1

實際上,編碼在其他瀏覽器擴展中起作用 - 我爲Firefox和谷歌瀏覽器擴展完成了這些工作,這些工作確實很完美。但在Safari中,我只能使用此瀏覽器。確實,這真的很可怕:)我認爲,這應該是工作,因爲其他瀏覽器正在工作。我會檢查你的建議:)謝謝 –

+0

Flambino是正確的:Safari只支持來自擴展的全局頁面,工具欄或彈出窗口的跨域XMLHttpRequest。您應該從其中一個位置執行xhr,然後在需要時使用消息將結果傳遞到您的注入腳本。 – canisbos