2009-12-20 108 views
10

有沒有人有幸從谷歌瀏覽器中的用戶腳本執行跨源XHR?請求通過服務器(我可以在日誌中看到它們),但是,從未觸發過readystatechanged事件。谷歌瀏覽器中用戶腳本的跨源XHR

擴展權限似乎沒有做到這一點。 JSONP也不是。

+0

根據http://code.google.com/chrome/extensions/xhr.html如果將userscript包裝在擴展中,擴展清單可以允許userscript製作XSS XHR。 – bzlm 2010-03-10 15:48:02

+0

感謝您的回覆,我確實瞭解了這一點。這種方法的問題是我無法將其託管在userscripts.org上,並希望它能像其他腳本一樣直接運行。 – Pranav 2010-03-13 22:47:57

回答

9

當前版本(13.0.781或更高版本)現在支持大多數或所有的GM_xmlhttpRequest()Doc功能 - 包括跨域請求
請參閱Issue 18857: Support cross-site XMLHttpRequest in content scripts

所以這個腳本現在工作完全沒有在Chrome(和Firefox,當然):

// ==UserScript== 
// @name   _Cross domain (XSS) GM_xmlhttpRequest, Chrome too 
// @include   http://stackoverflow.com/* 
// ==/UserScript== 

GM_xmlhttpRequest ({ 
    method:  "GET", 
    url:  "http://www.google.com/", 
    onload:  function (response) { 
        console.log ( response.status, 
            response.responseText.substring (0, 80) 
           ); 
       } 
}); 


(安裝該腳本,然後瀏覽任何SO網頁腳本會寫的第80個字符。 Google主頁到控制檯。)

+0

謝謝。我還沒有看過我的使用者年齡,這肯定給我一個確定它與Chrome兼容的理由。 – Pranav 2011-09-20 16:38:36

+0

請注意,這僅適用於'@ require'(與上述類似),[不適用於'@ match'](https://code.google.com/p/chromium/issues/detail?id=112746)。後者將拋出'XMLHttpRequest無法加載[...] Origin chrome-extension:// [...]是Access-Control-Allow-Origin不允許的。 – Arjan 2013-02-26 23:02:54

5

從Chrome 13開始,如果您在清單中包含網站的權限,則可以在內容腳本中執行交叉源請求。

Chrome中的用戶腳本是內容腳本。內容腳本不能製作跨源XHR。如果你想做跨源XHR,應該在擴展頁面(背景,彈出菜單,選項)中完成。

欲瞭解更多信息:鉻的 http://code.google.com/chrome/extensions/content_scripts.html http://code.google.com/chrome/extensions/xhr.html

+1

從Chrome 13.0.781開始,此答案已過時。 – 2011-09-17 06:34:19