


Teilen Sie Beispiele für die Verwendung von js zur Lösung domänenübergreifender Probleme
Was ist domänenübergreifend? Solange das Protokoll, der Domänenname oder der Port unterschiedlich sind, werden sie als unterschiedliche Domänen betrachtet.
URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名下 允许http://www.a.com/lab/a.jshttp://www.a.com/script/b.js 同一域名下不同文件夹 允许http://www.a.com:8000/a.jshttp://www.a.com/b.js 同一域名,不同端口 不允许http://www.a.com/a.jshttps://www.a.com/b.js 同一域名,不同协议 不允许http://www.a.com/a.jshttp://70.32.92.74/b.js 域名和域名对应ip 不允许http://www.a.com/a.jshttp://script.a.com/b.js 主域相同,子域不同 不允许http://www.a.com/a.jshttp://a.com/b.js 同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)http://www.cnblogs.com/a.jshttp://www.a.com/b.js 不同域名 不允许
Unterschiede in Ports und Protokollen können nur im Hintergrund gelöst werden.
Cross-Origin Resource Sharing (CORS)
CORS (Cross-Origin Resource Sharing) domänenübergreifende Ressourcenfreigabe definiert, wie Browser und Server beim Zugriff auf domänenübergreifende Ressourcen kommunizieren sollen. Die Grundidee von CORS besteht darin, benutzerdefinierte HTTP-Header zu verwenden, um dem Browser die Kommunikation mit dem Server zu ermöglichen, um zu bestimmen, ob die Anfrage oder Antwort erfolgreich sein soll oder fehlschlagen soll.
<script type="text/javascript"> var xhr = new XMLHttpRequest(); xhr.open("GET", "/trigkit4",true); xhr.send();</script>
Das obige trigkit4 ist ein relativer Pfad. Wenn wir CORS verwenden möchten, könnte der relevante Ajax-Code so aussehen:
<script type="text/javascript"> var xhr = new XMLHttpRequest(); xhr.open("GET", "http://segmentfault.com/u/trigkit4/",true); xhr.send();</script>
Der Unterschied zwischen dem Code und dem vorherigen Zum einen wird der relative Pfad durch den absoluten Pfad anderer Domänen ersetzt, dh die Schnittstellenadresse, auf die Sie domänenübergreifend zugreifen möchten.
Die Serverseite unterstützt CORS hauptsächlich durch die Einstellung Access-Control-Allow-Origin. Wenn der Browser die entsprechenden Einstellungen erkennt, kann er den domänenübergreifenden Ajax-Zugriff ermöglichen.
Um das domänenübergreifende Problem zu lösen, können wir die folgenden Methoden verwenden:
Domänenübergreifend durch JSONP
Jetzt kommt die Frage? Was ist JSONP? Die Wikipedia-Definition lautet: JSONP (JSON mit Padding) ist ein „Nutzungsmodus“ des Datenformats JSON, der es Webseiten ermöglicht, Daten von anderen Domänen anzufordern.
JSONP, auch gepolstertes JSON genannt, ist eine neue Methode zur Anwendung von JSON. Es handelt sich lediglich um JSON, das in Funktionsaufrufen enthalten ist, zum Beispiel:
callback({"name","trigkit4"});
JSONP besteht aus zwei Teilen: Callback-Funktion und Daten. Die Rückruffunktion ist die Funktion, die auf der Seite aufgerufen werden soll, wenn die Antwort eintrifft, und die Daten sind die JSON-Daten, die an die Rückruffunktion übergeben werden.
In js ist es nicht möglich, XMLHttpRequest direkt zum Anfordern von Daten in verschiedenen Domänen zu verwenden. Es ist jedoch möglich, js-Skriptdateien aus verschiedenen Domänen auf der Seite einzuführen. JSONP verwendet diese Funktion, um dies zu erreichen. Beispiel:
<script type="text/javascript"> function dosomething(jsondata){ //处理获得的json数据 }</script><script src="http://example.com/data.php?callback=dosomething"></script>
Nachdem die js-Datei erfolgreich geladen wurde, wird die Funktion ausgeführt, die wir im URL-Parameter angegeben haben, und die benötigten JSON-Daten werden als Parameter übergeben. Daher erfordert JSONP eine entsprechende Zusammenarbeit von der serverseitigen Seite.
<?php$callback = $_GET['callback'];//得到回调函数名$data = array('a','b','c');//要返回的数据echo $callback.'('.json_encode($data).')';//输出?>
Das Ausgabeergebnis lautet schließlich: dosomething(['a','b','c']);
Wenn Ihre Seite JQuery verwendet, wird sie von gekapselt Das Diese Methode macht es sehr bequem, JSONP-Vorgänge auszuführen.
<script type="text/javascript"> $.getJSON('http://example.com/data.php?callback=?,function(jsondata)'){ //处理获得的json数据 });</script>
jquery generiert automatisch eine globale Funktion, um das Fragezeichen in Callback =? zu ersetzen, und wird dann nach Erhalt der Daten automatisch zerstört. Tatsächlich fungiert es als temporäre Proxy-Funktion. Die $.getJSON-Methode ermittelt automatisch, ob es sich um eine domänenübergreifende Methode handelt. Wenn nicht, ruft sie die gewöhnliche Ajax-Methode auf. Wenn sie domänenübergreifend ist, ruft sie die JSONP-Rückruffunktion in Form eines asynchronen Ladens der JS-Datei auf.
Vor- und Nachteile von JSONP
Der Vorteil von JSONP besteht darin, dass es nicht durch dieselbe Ursprungsrichtlinie eingeschränkt ist wie die vom XMLHttpRequest-Objekt implementierte Ajax-Anfrage; es weist eine bessere Kompatibilität auf und kann verwendet werden in älteren Browsern kann es auf jedem Server ausgeführt werden und erfordert keine Unterstützung von XMLHttpRequest oder ActiveX. Nach Abschluss der Anforderung kann das Ergebnis durch einen Rückruf zurückgegeben werden.
Die Nachteile von JSONP sind: Es unterstützt nur GET-Anfragen, aber keine anderen Arten von HTTP-Anfragen wie POST; es unterstützt nur domänenübergreifende HTTP-Anfragen und kann das Problem der Interaktion zweier Seiten in unterschiedlichen Domänen nicht lösen einander. Probleme beim Ausführen von JavaScript-Aufrufen.
Vergleich zwischen CORS und JSONP
CORS ist zweifellos fortschrittlicher, bequemer und zuverlässiger als JSONP.
1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。 2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。 3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS)。
Übergreifen Sie Subdomains durch Ändern von document.domain
Browser haben eine Same-Origin-Richtlinie, und eine ihrer Einschränkungen besteht darin, dass wir in der ersten Methode gesagt haben, dass sie keine Ajax-Methode an die Anforderung übergeben kann Dokumente aus verschiedenen Quellen. Die zweite Einschränkung besteht darin, dass js nicht zwischen Frames in verschiedenen Domänen im Browser interagieren kann.
Fensterobjekte können zwischen verschiedenen Frameworks abgerufen werden, die entsprechenden Eigenschaften und Methoden können jedoch nicht abgerufen werden. Beispielsweise gibt es eine Seite mit der Adresse http://www.example.com/a.html. Auf dieser Seite befindet sich ein Iframe, dessen Quelle offensichtlich http://example.com/b.html ist Die Seite und der darin enthaltene Iframe befinden sich in unterschiedlichen Domänen, daher können wir die Dinge im Iframe nicht abrufen, indem wir js-Code in die Seite schreiben:
<script type="text/javascript"> function test(){ var iframe = document.getElementById('ifame'); var win = document.contentWindow;//可以获取到iframe里的window对象,但该window对象的属性和方法几乎是不可用的 var doc = win.document;//这里获取不到iframe里的document对象 var name = win.name;//这里同样获取不到window对象的name属性 }</script><iframe id = "iframe" src="http://example.com/b.html" onload = "test()"></iframe>
Zu diesem Zeitpunkt kann document.domain Das ist praktisch. Wir müssen nur die document.domain der beiden Seiten http://www.example.com/a.html und http://example.com/b.html auf denselben Domänennamen setzen. Es ist jedoch zu beachten, dass die Einstellung von document.domain begrenzt ist. Wir können document.domain nur auf sich selbst oder eine übergeordnete Domäne einer höheren Ebene festlegen und die Hauptdomäne muss dieselbe sein.
1.在页面 http://www.example.com/a.html 中设置document.domain:
<iframe id = "iframe" src="http://example.com/b.html" onload = "test()"></iframe><script type="text/javascript"> document.domain = 'example.com';//设置成主域 function test(){ alert(document.getElementById('iframe').contentWindow);//contentWindow 可取得子窗口的 window 对象 }</script>
2.在页面 http://example.com/b.html 中也设置document.domain:
<script type="text/javascript"> document.domain = 'example.com';//在iframe载入这个页面也设置document.domain,使之与主页面的document.domain相同</script>
修改document.domain的方法只适用于不同子域的框架间的交互。
使用window.name来进行跨域
window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的
使用HTML5的window.postMessage方法跨域
window.postMessage(message,targetOrigin) 方法是html5新引进的特性,可以使用它来向其它的window对象发送消息,无论这个window对象是属于同源或不同源,目前IE8+、FireFox、Chrome、Opera等浏览器都已经支持window.postMessage方法。
相关推荐:
Das obige ist der detaillierte Inhalt vonTeilen Sie Beispiele für die Verwendung von js zur Lösung domänenübergreifender Probleme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Quark Netdisk und Baidu Netdisk sind beide sehr praktische Speichertools. Viele Benutzer fragen sich, ob diese beiden Softwareprogramme kompatibel sind. Wie teile ich Quark Netdisk mit Baidu Netdisk? Auf dieser Website erfahren Sie ausführlich, wie Sie Quark Network Disk-Dateien auf der Baidu Network Disk speichern. So speichern Sie Dateien von Quark Network Disk auf Baidu Network Disk Methode 1. Wenn Sie wissen möchten, wie Sie Dateien von Quark Network Disk auf Baidu Network Disk übertragen, laden Sie zunächst die Dateien herunter, die auf Quark Network Disk gespeichert werden müssen, und öffnen Sie sie dann Wählen Sie im Baidu Network Disk-Client den Ordner aus, in dem die komprimierte Datei gespeichert werden soll, und doppelklicken Sie, um den Ordner zu öffnen. 2. Klicken Sie nach dem Öffnen des Ordners oben links im Fenster auf „Hochladen“. 3. Suchen Sie die komprimierte Datei, die auf Ihren Computer hochgeladen werden soll, und klicken Sie, um sie auszuwählen.

1. Zuerst rufen wir NetEase Cloud Music auf und klicken dann auf die Software-Homepage-Oberfläche, um die Song-Wiedergabeoberfläche aufzurufen. 2. Suchen Sie dann in der Song-Wiedergabeoberfläche die Schaltfläche für die Freigabefunktion oben rechts, wie im roten Feld in der Abbildung unten gezeigt, klicken Sie, um den Freigabekanal im Freigabekanal auszuwählen, und klicken Sie auf die Option „Teilen für“. Wählen Sie unten den ersten Eintrag „WeChat Moments“ aus, mit dem Sie Inhalte für WeChat Moments freigeben können.

Vor kurzem hat der Baidu Netdisk Android-Client eine neue Version 8.0.0 eingeführt. Diese Version bringt nicht nur viele Änderungen, sondern fügt auch viele praktische Funktionen hinzu. Am auffälligsten ist unter anderem die Verbesserung der Ordnerfreigabefunktion. Jetzt können Benutzer ganz einfach Freunde einladen, beizutreten und wichtige Dateien im Beruf und im Privatleben zu teilen, was eine bequemere Zusammenarbeit und gemeinsame Nutzung ermöglicht. Wie teilen Sie die Dateien, die Sie benötigen, mit Ihren Freunden? Ich hoffe, dass Ihnen der Herausgeber dieser Website weiterhelfen kann. 1) Öffnen Sie die Baidu Cloud APP, wählen Sie zuerst den entsprechenden Ordner auf der Startseite aus und klicken Sie dann auf das Symbol [...] in der oberen rechten Ecke der Benutzeroberfläche (wie unten gezeigt). 2) Klicken Sie dann auf [+]. Klicken Sie auf die Spalte „Gemeinsame Mitglieder“ 】 und markieren Sie abschließend alle

Mango TV bietet verschiedene Arten von Filmen, Fernsehserien, Varietés und anderen Ressourcen, und Benutzer können frei wählen, ob sie diese ansehen möchten. Mango TV-Mitglieder können nicht nur alle VIP-Dramen ansehen, sondern auch die höchste Bildqualität einstellen, damit Benutzer die Dramen gerne ansehen können. Nachfolgend stellt Ihnen der Herausgeber einige kostenlose Mango TV-Mitgliedskonten vor, die Sie nutzen können. Beeilen Sie sich und werfen Sie einen Blick darauf Schau mal. Kostenloses Teilen des neuesten Mitgliedskontos von Mango TV 2023: Hinweis: Dies sind die neuesten gesammelten Mitgliedskonten. Sie können sich anmelden und diese direkt verwenden. Ändern Sie das Passwort nicht nach Belieben. Kontonummer: 13842025699 Passwort: qds373 Kontonummer: 15804882888 Passwort: evr6982 Kontonummer: 13330925667 Passwort: jgqae Kontonummer: 1703

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

HP-Drucker sind in vielen Büros unverzichtbare Druckgeräte. Durch die Installation des Druckertreibers auf dem Computer können Probleme, wie zum Beispiel, dass der Drucker keine Verbindung herstellen kann, perfekt gelöst werden. Wie installiert man den HP-Druckertreiber? Der folgende Editor stellt Ihnen zwei Methoden zur Installation von HP-Druckertreibern vor. Die erste Methode: Laden Sie den Treiber von der offiziellen Website herunter. 1. Durchsuchen Sie die offizielle Website von HP China in der Suchmaschine und wählen Sie in der Support-Spalte [Software und Treiber] aus. 2. Wählen Sie die Kategorie [Drucker] aus, geben Sie Ihr Druckermodell in das Suchfeld ein und klicken Sie auf [Senden], um Ihren Druckertreiber zu finden. 3. Wählen Sie den entsprechenden Drucker entsprechend Ihrem Computersystem aus. Wählen Sie für Win10 den Treiber für das Win10-System. 4. Nach erfolgreichem Download finden Sie es im Ordner

Tomato Novels ist eine reichhaltige Schatzkammer für Romane, die eine große Anzahl hochwertiger Romanressourcen sammelt. Hier können Sie ganz nach Ihren Vorlieben aus vielen verschiedenen Romangattungen Ihre Lieblingsromane auswählen. Für diejenigen unter Ihnen, die gerne lesen, ist dies zweifellos eine literarische Welt, in der Sie sich frei bewegen können. Wenn Sie auf Ihr Lieblingslesematerial stoßen, ist es manchmal so, als würden Sie es mit Freunden teilen, um es gemeinsam zu lesen. Viele Benutzer wissen jedoch nicht genau, wie sie es teilen sollen. Daher bietet Ihnen dieses Tutorial eine detaillierte Einführung in das Handbuch für Spieler, die dies wünschen um mehr zu erfahren Kommen Sie und lesen Sie diesen Artikel mit! Wie teile ich Tomatenromane mit Freunden? 1. Öffnen Sie Tomato Novel, klicken Sie, um den Roman aufzurufen, und klicken Sie auf das Teilen-Symbol in der oberen rechten Ecke. 2. Wählen Sie den Freigabekanal aus. Hier nehme ich das Teilen mit WeChat-Freunden als Beispiel. 3. Klicken Sie auf Teilen. 4. Sie können es überprüfen

Titel: Um das Problem zu lösen, dass Discuz WeChat-Freigaben nicht angezeigt werden können, sind spezifische Codebeispiele erforderlich. Mit der Entwicklung des mobilen Internets ist WeChat zu einem unverzichtbaren Bestandteil des täglichen Lebens der Menschen geworden. Bei der Website-Entwicklung werden viele Websites WeChat-Freigabefunktionen integrieren, um das Benutzererlebnis zu verbessern und die Website-Präsenz zu erweitern, sodass Benutzer Website-Inhalte problemlos mit Moments oder WeChat-Gruppen teilen können. Allerdings kann es bei der Verwendung von Open-Source-Forumsystemen wie Discuz manchmal zu dem Problem kommen, dass WeChat-Freigaben nicht angezeigt werden können, was zu gewissen Schwierigkeiten bei der Benutzererfahrung führt.
