目次
同一生成元ポリシーと制限
フロントエンドとバックエンド間の通信方法
Ajaxの作成方法
クロスドメイン通信のいくつかの方法
ハッシュの詳細な説明:
postMessage
WebSocket
CORS
ホームページ ウェブフロントエンド jsチュートリアル JS がブラウザ通信を実装する方法

JS がブラウザ通信を実装する方法

Mar 23, 2018 am 11:40 AM

この記事では、JS がブラウザー通信をどのように実装するかを主にコードの形で紹介します。皆さんのお役に立てれば幸いです。

同一生成元ポリシーと制限

同一生成元ポリシーは、同じソースからロードされたドキュメントまたはスクリプトが別のソースからのリソースと対話する方法を制限します。これは、潜在的に悪意のあるファイルを隔離するための重要なセキュリティ メカニズムです。 (プロトコル http/https、ドメイン名、ポートの 3 つは同じです)

  • Cookie/LocalStorage と IndexDB を読み取れません

  • DOM を取得できません

  • Ajax リクエストを送信できません

URL 結果 原因
http://store.company.com/dir2/other.html 成功
http://store.company.com/ dir/inner/ another.html 成功
https://store.company.com/secure.html 失敗 異なるプロトコル (https と http)
http:// store.company.com:81/dir/etc.html 失敗しました 異なるポート (81 と 80)
http://news.company.com/dir/other.html 失敗しました 違うドメイン名 (ニュースとストア)

フロントエンドとバックエンド間の通信方法

    ​​
  • Ajax: 同一オリジンでの通信方法

  • ​​
  • WebSocket: 同一オリジンポリシーの制限なし

  • CORS: クロスドメイン通信と同一オリジン通信をサポート

Ajaxの作成方法

  • XMLHttpRequestオブジェクトのワークフロー

  • 互換処理

  • イベントトリガー条件

  • 注文しました

りー

クロスドメイン通信のいくつかの方法

メソッド 手順
JSONP 動的作成<script>标签,设置其src,回调函数在src中设置,一定要有callback=handleResponse函数,在页面中,返回的JSON作为参数传入回调函数中,我们通过回调函数来来操作数据。function handleResponse(response){// 对response数据进行操作代码}
ハッシュ ハッシュは後のコンテンツですURL アドレスの # 番号が変更されます。その値の検索はページの更新をトリガーしません。URL の疑問符の後、それが変更されると、更新がトリガーされます
postMessage window.postMessage() メソッドは、クロスソース通信を安全に実装できます。通常、2 つの異なるページのスクリプトは、実行されるページが同じプロトコル (通常 https)、ポート番号 (https のデフォルトは 443)、およびホスト (モジュロ Document.domain のページ上にある場合にのみ実行されます)両方のページで同じ値に設定されます)、2 つのスクリプトが相互に通信できるようになります。 window.postMessage() メソッドは、この制限を回避するための制御されたメカニズムを提供しており、正しく使用されている限り安全です。 https://developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage
WebSocket は同一生成元ポリシーの影響を受けません https://developer.mozilla.org/zh- CN/docs/Web/API/WebSocket
CORS は「Cross-Origin resource Sharing」(クロスオリジンリソース共有)の略で、具体的にはヘッダー情報にOriginフィールドを追加することを意味します。 Origin フィールドは、このリクエストの送信元 (プロトコル + ドメイン名 + ポート) を示すために使用されます。

ハッシュの詳細な説明:

var xht = XMLHttpRequest ? new XMLHttpRequest():new window.ActiveXObject(&#39;Microsoft.XMLHTTP&#39;);var data = opt.data,
    url = opt.url,
    type=opt.type.toUpperCase(),
    dataArr=[];for(var k in data){
    dataArr.push(k+&#39;=&#39;+data[k]);
}if(type === &#39;GET&#39;){
    url = url + &#39;?&#39; + dataArr.join("&");
    xhr.open(type, url.replace(/\?s/g,&#39;&#39;), true);
    xhr.send();
}if(type === &#39;POST&#39;){
    xhr.open(type, url, true);
    xhr.setRequestHeader(&#39;Content-type&#39;,&#39;application/x-www-form-urlencoded&#39;);
    xhr.send(dataArr.join(&#39;&&#39;));
}
xhr.onload = function(){
    if(xhr.status === 200 || xhr.status === 304){ //媒体资源需要206
        var res;        if(opt.success && opt.success instanceof Function){
            res = xhr.responseText;            if(typeof res === &#39;string&#39;){
                res = JSON.parse(res);
                opt.success.call(xhr, res);
            }
        }
    }else{        if(opt.error && opt.error instanceof Function){
            opt.error.call(xhr, res);
        }
    }
}
ログイン後にコピー

postMessage

// 利用Hash,场景是当前页面A通过iframe或者frame嵌入了跨域页面B//A中伪代码如下:var B = document.getElelementByTagName(&#39;iframe&#39;);
B.src = B.src + &#39;#&#39; + &#39;data&#39;;// B中伪代码window.onhashchange = function(){
    var data = window.location.hash;
}
ログイン後にコピー

WebSocket

// 窗口A(http://A.com)向跨域的窗口B(http://B.com)发送信息window.postMessage(data, "http://B.com");()//在窗口监听window.addEventListener(&#39;message&#39;, function(event){
    console.log(event.origin)//http://A.com
    console.log(event.source)//引用A window
    console.log(event.data) //数据}, false)
ログイン後にコピー

CORS

var ws = new WebSocket(&#39;wss://a.com&#39;);
//ws 类似http为非加密,wss类似https为加密
ws.onopen = function(){}//打开链接
ws.onmessage = function(){}//收到消息
ws.onclose = function(){}//关闭连接
ログイン後にコピー

以上がJS がブラウザ通信を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CSSを介してサイズ変更シンボルをカスタマイズし、背景色で均一にする方法は? CSSを介してサイズ変更シンボルをカスタマイズし、背景色で均一にする方法は? Apr 05, 2025 pm 02:30 PM

CSSでサイズ変更シンボルをカスタマイズする方法は、背景色で統一されています。毎日の開発では、調整など、ユーザーインターフェイスの詳細をカスタマイズする必要がある状況に遭遇することがよくあります...

Webページにローカルにインストールされている「Jingnan Mai Round Body」を正しく表示するにはどうすればよいですか? Webページにローカルにインストールされている「Jingnan Mai Round Body」を正しく表示するにはどうすればよいですか? Apr 05, 2025 pm 10:33 PM

最近、Webページにローカルにインストールされたフォントファイルを使用して、インターネットから無料のフォントをダウンロードし、システムに正常にインストールしました。今...

カスタムスタイルのシートは、SafariのローカルWebページでバイドゥページでは効果を発揮できないのはなぜですか? カスタムスタイルのシートは、SafariのローカルWebページでバイドゥページでは効果を発揮できないのはなぜですか? Apr 05, 2025 pm 05:15 PM

Safariでカスタムスタイルシートを使用することについてのディスカッション今日は、Safariブラウザ向けのカスタムスタイルシートのアプリケーションに関する質問について説明します。フロントエンド初心者...

フレックスレイアウトの下のテキストは省略されていますが、コンテナは開かれていますか?それを解決する方法は? フレックスレイアウトの下のテキストは省略されていますが、コンテナは開かれていますか?それを解決する方法は? Apr 05, 2025 pm 11:00 PM

フレックスレイアウトとソリューションの下でのテキストの過度の省略によるコンテナの開口部の問題が使用されます...

Webページにローカルにインストールされたフォントファイルを使用する方法は? Webページにローカルにインストールされたフォントファイルを使用する方法は? Apr 05, 2025 pm 10:57 PM

Webページにローカルにインストールされたフォントファイルを使用する方法Webページ開発でこの状況に遭遇しましたか:コンピューターにフォントをインストールしました...

JavaScriptまたはCSSを介してブラウザ印刷設定でページの上部と終了を制御する方法は? JavaScriptまたはCSSを介してブラウザ印刷設定でページの上部と終了を制御する方法は? Apr 05, 2025 pm 10:39 PM

JavaScriptまたはCSSを使用して、ブラウザの印刷設定のページの上部と端を制御する方法。ブラウザの印刷設定には、ディスプレイが...

CSSとFlexBoxを使用して、さまざまな画面サイズで画像とテキストのレスポンシブレイアウトを実装する方法は? CSSとFlexBoxを使用して、さまざまな画面サイズで画像とテキストのレスポンシブレイアウトを実装する方法は? Apr 05, 2025 pm 06:06 PM

CSSを使用してレスポンシブレイアウトを実装して、Webデザインのさまざまな画面サイズの下でレイアウトの変更を実装する場合、CSS ...

エッジブラウザの特定のDIV要素が表示されないのはなぜですか?この問題を解決する方法は? エッジブラウザの特定のDIV要素が表示されないのはなぜですか?この問題を解決する方法は? Apr 05, 2025 pm 08:21 PM

ユーザーエージェントスタイルシートによって引き起こされるディスプレイの問題を解決する方法は? Edgeブラウザを使用する場合、プロジェクトのDIV要素を表示することはできません。チェックした後、私は投稿しました...

See all articles