Window.nameはクロスドメインデータ転送の問題を解決します

Window.nameはクロスドメインデータ転送の問題を解決します
<br />原文: http://research.microsoft.com/~helenw/papers/subspace.pdf
window.name 転送技術はもともと、クッキーのいくつかの欠点 (ドメイン名ごとに 4 x 20 Kb の制限、データは文字列のみ、クッキーの設定と取得の構文が複雑など) を解決するために Thomas Frank によって発明されました (詳細については、原文「クッキーなしのセッション変数」を参照してください)。その後、Kris Zyp はこの方法に基づいて window.name 転送を強化し、Dojo (dojox.io.windowName) に導入して、クロスドメイン データ転送の問題を解決しました。
window.name の優れた点:名前の値は、異なるページ (異なるドメインでも) を読み込んだ後も保持され、非常に長い名前の値 (2 MB) をサポートできます。
window.name 伝送技術の基本原理と手順は次のとおりです。

name はブラウザ環境の global/window オブジェクトのプロパティであり、フレームに新しいページが読み込まれると、name のプロパティ値は変更されません。 iframe にリソースを読み込むと、ターゲット ページはフレームの name 属性を設定します。この名前属性値を取得して、Web サービスによって送信された情報にアクセスできます。ただし、name 属性は同じドメイン名を持つフレームにのみアクセスできます。つまり、name 属性にアクセスするには、リモート Web サービス ページが読み込まれた後、フレームを元のドメインに戻す必要があります。同一生成元ポリシーにより、他のフレームが名前属性にアクセスすることはできません。名前属性を取得したら、フレームを破棄します。
最上位レベルでは、name 属性は安全ではなく、name 属性に設定されたすべての情報は後続のすべてのページで利用できます。ただし、windowName モジュールは常に iframe 内のリソースを読み込み、データが取得されるか、最上位レベルの新しいページを参照すると、iframe は破棄されるため、他のページは window.name プロパティにアクセスできなくなります。
基本的な実装コードは YUI に基づいており、Kejun によって書かれた例から派生しています。

(関数(){
var YUD = YAHOO.util.Dom、YUE = YAHOO.util.Event;
データリクエスト = {
_doc: ドキュメント、
cfg: {
プロキシ URL: 'proxy.html'
}
};
dataRequest.send = function(sUrl, fnCallBack){
if(!sUrl || typeof sUrl !== '文字列'){
戻る;
}
sUrl = (sUrl.indexOf('?') > 0 ? '&' : '?') 'windowname=true';
var frame = this._doc.createElement('iframe'), state = 0, self = this;
this._doc.body.appendChild(フレーム);
frame.style.display = 'なし';
var clear = 関数(){
試す{
frame.contentWindow.document.write();
フレームのコンテンツウィンドウを閉じます。
self._doc.body.removeChild(フレーム);
}キャッチ(e){}
};
var getData = 関数(){
試す{
var da = frame.contentWindow.name;
}キャッチ(e){}
クリア();
if(fnCallBack && typeof fnCallBack === 'function'){
fnCallBack(da);
}
};
YUE.on(フレーム、'load'、関数(){
if(状態 === 1){
データを取得します。
} そうでない場合(状態 === 0){
状態 = 1;
frame.contentWindow.location = self.cfg.proxyUrl;
}
});
フレーム.src = sUrl;
};
})();

<<:  MySQL 更新セットとの違い

>>:  element-uiのアップロードコンポーネントでファイルやその他のパラメータを転送する際の問題を分析する

推薦する

background-positionプロパティでのパーセンテージ値の使用法の検討

背景位置が背景画像の表示に与える影響この2日間のプロジェクトでホームページの写真を入れ替えていたとこ...

Dockerにおけるコンテナとイメージの違いについてお話ししましょう

鏡とは何ですか?イメージは、複数のイメージ レイヤー (UnionFS および AUFS ファイル ...

プライベートウェアハウス(レジストリとハーバー)を構築するためのDockerの実装

使用される Docker イメージが増えるにつれて、イメージを保存する場所、つまりウェアハウスが必要...

CSSで特殊なグラフィックを描く方法

1. 三角形境界線の設定 コード: 幅: 300ピクセル; 高さ: 300px; 背景: 赤; 境界...

美しいHTMLコードの書き方

美しい HTML コードの外観 美しい HTML コードの書き方。外国人が書いた記事: 美しい HT...

Java は Apache.POI を使用して HSSFWorkbook を Excel にエクスポートします

Apache.POI の HSSFWorkbook を使用して Excel にエクスポートします。具...

HTML 内の input type="reset" タグが無効 (機能しない) である理由として考えられるもの。

<html:reset> タグを使用すると、リセット ボタンが無効になり、ボタンをクリッ...

jQuery プロジェクトで重複送信を防ぐ方法

新しいプロジェクトでは、axios によって重複した送信を防ぐことができますが、古いプロジェクト (...

ethers.js を使用して Solidity スマート コントラクトをデプロイする方法

Ethereum 上で DApps を開発したことがある場合は、フロントエンド JavaScript...

React Nativeでシンプルなゲームエンジンを作る

目次導入始めるReact Nativeゲームエンジンの簡単な紹介React Nativeでスネークゲ...

Dockerはクロスプラットフォーム機能を実現するためにnet5プログラムを導入

展開環境: ここでは docker コンテナ、Linux システム、VmWare 仮想マシンが使用さ...

1時間で学ぶMySQLの基礎

目次MySQL を使い始めるMySQL 管理6. MySQL サーバーを起動および停止します。 7....

CentOS 7でsambaを使用してフォルダーを共有するための完全な手順

序文Samba は、サーバー プログラムとクライアント プログラムで構成され、Linux システム上...

Ubuntu 20.04 ファイアウォール設定の簡単なチュートリアル (初心者)

序文ますます便利になった今日のインターネット社会では、さまざまなインターネット ランサムウェア ウイ...

Nginx のタイムドログカットの詳細な説明

序文デフォルトでは、Nginx ログはファイルに書き込まれます。各ドメインのログを区別するために、通...