簡體   English   中英

跨域javascripting的替代方案?

[英]alternative to cross-domain javascripting?

目前我依靠代理腳本來處理單一來源政策的這個問題。 它很慢,並且會產生開銷。 更不用說,javascript沒有呈現。

那里有替代品嗎?

如果您可以提供回調名稱作為提供相關JavaScript代碼的服務的參數,那么您可以在文檔中附加腳本標記,其中src屬性指向服務調用。 否則,你運氣不好。

使用iframe並嘗試window.postMessage(message, origin) (來自iframe的parent.postMessage和來自首頁的iframeElement.contentWindow.postMessage )適用於所有最新的主流瀏覽器(Firefox,IE,Safari,Chrome,等)和舊瀏覽器的更改/輪詢window.name

哦,親愛的,我認為您正在尋找的解決方案是使用IFRAME。 然而,iframe方法既是精神上的,也是技術上的。 我建議你從這個指南開始:

與IFrame的跨域通信

另一種方法是使用腳本標記和json以異步方式從另一台服務器獲取數據:

<script src="http://remotesite.com/path/to/script/blah.js"></script>

您可以創建一個新的SCRIPT標記元素來傳遞和加載數據並附加到DOM或將標記插入元素innerHTML中。

我相信你可以找到一些詳細的例子和方法來實現,但有一點你應該跟蹤新的SCRIPT方法是添加這么多的DOM。 這可能有所幫助,並為您提供一個起點:

function require (url, callback) {
    if (!isScriptLoaded(url)) { 
        document.write('<script src="' + url + '" type="text/javascript" charset="utf-8"><\/script>');

        if (callback) {
            callback();
        }
    }
}

function isScriptLoaded(src) {
    var scriptsLoaded =  {};
    var scriptTags    = document.getElementsByTagName("script");

    for (var i = 0, script; script = scriptTags[i]; i++) {
        if (script.src) { 
            scriptsLoaded[script.src] = 1;
        }
    };

    if (scriptsLoaded[src]) {
        return true; 
    }

    return false;
}

(未經測試,但應該工作!)

無論哪種方式 - 祝你好運。

JSON-P非常適合這種事情。 如果您正在使用jQuery或類似的JavaScript庫,那么您的工作將更加輕松:

http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback

當然,它將取決於您正在嘗試做什么,這將決定是使用JSON-P,隱藏的iframe,postMessage,Flash代理還是任何其他奇特的解決方案。

如果您控制兩個域並且只關心Firefox 3.5+,則可以使用XMLHttpRequest對象並使用Access Control設置權限。

暫無
暫無

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

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