簡體   English   中英

如何在JavaScript / Chrome中本地執行跨域請求?

[英]How to perform cross domain requests locally in JavaScript/Chrome?

我正在開發一個測試頁面,該頁面僅供我自己使用,僅供Google Chrome使用。 有沒有辦法用這樣的條件對第三方服務器(不允許這樣的請求)執行跨域請求? 請求可以是GETOPTIONS

(我知道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頁面上為擴展名列出的哈希值。 (它將是一長串小寫字母。)現在,當頁面執行跨源資源時,它會使用瀏覽器擴展的權限,不受同源策略的限制。

請注意,您需要將任何內聯腳本移動到單獨的文件中,以符合擴展CSP要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM