[英]How to perform cross domain requests locally in JavaScript/Chrome?
我正在開發一個測試頁面,該頁面僅供我自己使用,僅供Google Chrome使用。 有沒有辦法用這樣的條件對第三方服務器(不允許這樣的請求)執行跨域請求? 請求可以是GET
或OPTIONS
。
(我知道Chrome擴展程序,如高級REST客戶端,它可以執行此類請求,但它對我沒有幫助,因為復雜的計算應該在請求執行之前執行)
一種方法是從Web服務器而不是本地文件系統提供文件。 另一種方法是使用標志啟動Chrome:
chrome --disable-web-security
(來自Chrome上的THREE.js的本地圖像上的跨源圖像加載被拒絕 )
更廣泛的標志列表在這里: http : //peter.sh/experiments/chromium-command-line-switches/
我正在開發一個類似於此的項目,我不得不將一個簡單的html文件上傳到我的一個prod服務器進行測試,這樣我就可以測試跨域功能。 html文件指向localhost,因此它只適用於我在開發過程中。
jquery代碼看起來像這樣(以防它有幫助):
$.ajax({
type: "POST",
dataType: "json",
cache: false,
url: url,
data: data,
crossDomain: true,
success: function (data) {
ATSJBAjax = null;
if (callback != null) callback(data);
}
});
此外,我正在使用c#/ MVC,我必須向所有控制器方法添加一個屬性,將“Access-Control-Allow-Origin”添加到響應標頭中,以便Chrome可以正常使用它。 我調用了屬性“AllowCrossDomainAccess”,它引用了下面的類:
public class AllowCrossDomainAccessAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
base.OnActionExecuting(filterContext);
}
}
一種選擇是完全禁用同源策略,如在Chrome中禁用同源策略中所述 。 這可能會對你有所幫助,但它有點不優雅,因為它關閉了整個瀏覽器實例的同源策略。
第二種方法是創建一個小型Chrome擴展程序,其中包含您需要加載的所有文件。 它將使您的文件可以通過chrome-extension://...
並且只有該擴展名中的文件才能免受同源策略的影響。
創建一個新文件夾,將測試網頁放入其中,並在同一文件夾中創建manifest.json
文件:
/testing_extension
test_page_immune_from_same_origin.html
script_used_by_test_page.js
styles_for_test_page.css
manifest.json
manifest.json
的內容應該是
{
"name": "All-origin access extension",
"manifest_version": 2,
"version": "1.0",
"permissions": ["<all_urls>"]
}
通過轉到chrome://extensions
,啟用Developer Mode
,然后選擇帶有Load unpacked extension...
選項的新文件夾來Load unpacked extension...
。
您可以將您的頁面視為擴展資源chrome-extension://[app_id]/[file_name]
,其中“ app_id
”是chrome://extensions
頁面上為擴展名列出的哈希值。 (它將是一長串小寫字母。)現在,當頁面執行跨源資源時,它會使用瀏覽器擴展的權限,不受同源策略的限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.