変更しようとしているワードプレスプラグインのJavaScriptファイルがあります。ある種の抜け穴のあるクロスドメインリクエストを回避しているようです。これはこの関数です:
function urlCallback(url){
var req = url;
var head = document.getElementsByTagName("head").item(0);
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", req);
head.appendChild(script);
}
渡されるURLは'http://url.com/page?callback=namespace.myFunction'
、myFunctionがスクリプトの他の場所で定義された関数であるようなものです。
私の理解では、これは私のページの上部にソースURLを挿入し、ブラウザにそのページをロードさせます。次に、そのURLにアタッチされたコールバックが呼び出され、結果が単一のパラメーターとしてサンプル関数myFunctionに渡されます。
私の問題は、いくつかの異なる一意のURLに対してmyFunctionを呼び出す必要があることですが、結果は呼び出し元のURLに関連付けられています。myFunctionは、ページの読み込みが完了するたびに呼び出されるように見えるため、操作しているデータセットを単純に数えることはできません。myFunctionにコールバックURLにエンコードされた追加の変数を渡すか、myFunctionがアタッチされたURLを認識するための何らかの方法が必要です。
誰か助けてもらえますか?
編集:
さらに詳しく説明すると、これが私が持っているコードの簡略化されたバージョンです:
var parseUrls = (function(){
function urlCallback(url){
var req = url;
// Here is where I need to save the url
var head = document.getElementsByTagName("head").item(0);
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", req);
head.appendChild(script);
}
return {
options: {},
parseNextUrl: function(result) {
if (!result || !result.data) { return; }
var data = result.data;
// Here is where I need the url
},
parseUrl: function(result) {
if (!result || !result.data) { return; }
var data = result.data;
for (var i = 0; i < data.length; i++) {
urlCallback( data[i].url + "/new_url/page?callback=parseUrls.parseNextUrl" );
}
},
showResult: function(options){
urlCallback( "http://start.url.com/page?callback=parseUrls.parseUrl" );
this.options = options;
}
};
})();
明確にするために、ソース要求が終了するたびにparseNextUrlが呼び出されます。これは、すべてのurlCallback呼び出しがその時点ですでに終了していることを意味します。