Windowsを使用します.nameドメイン間問題の解決
3166 ワード
コンテンツソース
懏飛のブログ
ドメイン間のHTMLクリップを取得するのに適しており、JSONを取得するにはSCRIPTタグで解決できる.
ドメイン間で実現するプロセスを独自の言葉で説明します.
Aドメイン名の下のあるページの下で、別のドメイン名B(サブドメインまたは異なるドメイン名)にデータの取得を要求する必要があり、まずIRAMME(SRCが要求するURLとして直接記入)を作成してドメイン間ページにロードし、同時にそのIRAMMEのonloadイベントを傍受する.IRMAEにロードされたBドメイン名ページはJSでwindowにデータを与える.nameは、付与が完了すると、自身のlocationを変更することによりAドメイン名の下の空白ページにジャンプする、この空白ページのロードが完了すると、今回要求されたコールバックをトリガーしてIRAMMEを除去する、このときIRAMMEはホームページと同ドメイン(いずれもAドメイン)であるため、IRAMMEのwindowを取得することができる.nameのデータ
次のコードは原文から抜粋されています.
window.nameのすばらしさ:name値は異なるページ(さらには異なるドメイン名)にロードされた後も存在し、非常に長いname値(2 MB)をサポートすることができる.
Aドメインは以下のコードで要求を開始し、コールバックを実現する
Bドメインの下のページはこのようにwindowにデータをバインドする.name
もう1つのドメイン間ソリューションは複雑で、同じドメインの下のサブドメインとサブドメイン、またはサブドメインと親ドメインの通信を実現できますが、ホームページ面がプライマリドメインである必要があります.
DEMOの表示
懏飛のブログ
ドメイン間のHTMLクリップを取得するのに適しており、JSONを取得するにはSCRIPTタグで解決できる.
ドメイン間で実現するプロセスを独自の言葉で説明します.
Aドメイン名の下のあるページの下で、別のドメイン名B(サブドメインまたは異なるドメイン名)にデータの取得を要求する必要があり、まずIRAMME(SRCが要求するURLとして直接記入)を作成してドメイン間ページにロードし、同時にそのIRAMMEのonloadイベントを傍受する.IRMAEにロードされたBドメイン名ページはJSでwindowにデータを与える.nameは、付与が完了すると、自身のlocationを変更することによりAドメイン名の下の空白ページにジャンプする、この空白ページのロードが完了すると、今回要求されたコールバックをトリガーしてIRAMMEを除去する、このときIRAMMEはホームページと同ドメイン(いずれもAドメイン)であるため、IRAMMEのwindowを取得することができる.nameのデータ
次のコードは原文から抜粋されています.
window.nameのすばらしさ:name値は異なるページ(さらには異なるドメイン名)にロードされた後も存在し、非常に長いname値(2 MB)をサポートすることができる.
Aドメインは以下のコードで要求を開始し、コールバックを実現する
(function(){
var YUD = YAHOO.util.Dom, YUE = YAHOO.util.Event;
dataRequest = {
_doc: document,
cfg: {
proxyUrl: 'proxy.html'
}
};
dataRequest.send = function(sUrl, fnCallBack){
if(!sUrl || typeof sUrl !== 'string'){
return;
}
sUrl += (sUrl.indexOf('?') > 0 ? '&' : '?') + 'windowname=true';
var frame = this._doc.createElement('iframe'), state = 0, self = this;
this._doc.body.appendChild(frame);
frame.style.display = 'none';
var clear = function(){
try{
frame.contentWindow.document.write('');
frame.contentWindow.close();
self._doc.body.removeChild(frame);
}catch(e){}
};
var getData = function(){
try{
var da = frame.contentWindow.name;
}catch(e){}
clear();
if(fnCallBack && typeof fnCallBack === 'function'){
fnCallBack(da);
}
};
YUE.on(frame, 'load', function(){
if(state === 1){
getData();
} else if(state === 0){
state = 1;
frame.contentWindow.location = self.cfg.proxyUrl;
}
});
frame.src = sUrl;
};
})();
Bドメインの下のページはこのようにwindowにデータをバインドする.name
<html>
<body>
<p id="content">
some <strong>html/xml-style</strong>data
</p>
</body>
<script type="text/javascript">
window.name = document.getElementById("content").innerHTML;
</script>
</html>
もう1つのドメイン間ソリューションは複雑で、同じドメインの下のサブドメインとサブドメイン、またはサブドメインと親ドメインの通信を実現できますが、ホームページ面がプライマリドメインである必要があります.
DEMOの表示