クロスドメインjavascriptingの代替手段?
-
06-07-2019 - |
質問
現在、この単一の発信元ポリシーの問題を処理するためにプロキシスクリプトに依存しています。遅く、オーバーヘッドが発生します。言うまでもなく、javascriptはレンダリングされません。
実用的な代替手段はありますか?
解決
ああ、私はあなたが探している解決策はIFRAMEによるものだと思います。ただし、iframeアプローチは精神的および技術的な取り組みです。このガイドから始めることをお勧めします。
別のアプローチは、スクリプトタグとjsonを使用して非同期的に別のサーバーからデータを取得することです:
<script src="http://remotesite.com/path/to/script/blah.js"></script>
新しいSCRIPTタグ要素を作成して、データを渡してロードし、DOMに追加したり、要素のinnerHTMLにマークアップを挿入したりできます。
いくつかの詳細な例と実装方法を見つけることができると確信していますが、新しいSCRIPTメソッドで追跡する必要があることの1つは、非常に多くの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;
}
(テストされていませんが、動作するはずです!)
どちらの方法でも幸運を祈ります。
他のヒント
問題のJavaScriptコードを提供するサービスのパラメーターとしてコールバック名を提供できる場合、サービス呼び出しを指す src
属性を使用して、ドキュメントにスクリプトタグを追加できます。 。そうでなければ、あなたは運が悪い。
iframeを使用して window.postMessage(message、origin)
(iframeからの parent.postMessage
と iframeElement.contentWindow.postMessage
)をすべての最新の主要ブラウザ(Firefox、IE、Safari、Chromeなど)で使用し、古いブラウザの window.name
を変更/ポーリングします。
JSON-Pは、このようなことには非常に理想的です。 jQueryまたは同様のJavaScriptライブラリを使用している場合、仕事はさらに簡単になります。
http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback
もちろん、JSON-P、非表示のiframe、postMessage、Flashプロキシ、またはその他のエキゾチックなソリューションを使用するかどうかは、ユーザーが何をしようとしているかによって決まります。
両方のドメインを制御し、Firefox 3.5以降のみを管理する場合は、XMLHttpRequestオブジェクトを使用し、アクセス制御。