• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] XMLHttpRequest & Javascript auf der abgerufenen Seite

Computerfreak

New member
Hallo

ich bin dabei eine Chrome Extension zu bauen. diese soll eine html Seite auf meinem Server aufrufen. Ich mache dies mit:
Code:
var request = new XMLHttpRequest;
                request.open("GET", "https://www.xxxxxx.de/pe/xyz.html", true);
                request.addEventListener('load', function (event) {
                    if (request.status == 200) {

                        var page = document.implementation.createHTMLDocument("tmpfb");

                        page.body.innerHTML = request.response;
                        chrome.extension.getBackgroundPage().console.log(page);
                     
                    }
                });

Wenn ich mir die page in der Konsole ansehe, sehe ich dort den kompletten html Code meiner xyz.html Seite. Soweit so gut.

in xyz.html habe ich ein div in das ein Javascript innerhalb von xyz.html was reinschreiben soll. Wenn ich xyz.html direkt im Browser aufrufe wird das div auch korrekt beschrieben. Aber wenn ich mir den Sourcecode der Seite ansehe, die in meiner extension unter page angezeigt wird, dann ist das div leer. woran liegt das?

meine html Seite:
Code:
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
</head>
<body>
    <div id="name"></div>
    
    <script> // Facebook login SDK scripts

			....
                    document.getElementById('name').innerHTML = 'Facebook UserName=' + name;
            ....        
  
    </script>
</body>
</html>
 
Zuletzt bearbeitet:
Ich glaube das ist leider nicht das Problem. Ich hab das mal so abgewandelt das das innerHTML raus ist:
Code:
var request = new XMLHttpRequest;
                request.responseType = "document";
                request.open("GET", "https://www.xxxxx.de/pe/xyz.html", true);
                request.addEventListener('load', function (event) {
                    if (request.status == 200) {

                        var page = document.implementation.createHTMLDocument("tmpfb");
                        page = request.response;
                        
                        chrome.extension.getBackgroundPage().console.log('responseText: ' + page.getElementById('name').textContent);
Auch nach der Änderung stand in name leider nicht der gesetzte Wert vom Javascript drin. Was muss ich denn machen um das javascript in der Seite nochmal aufzurufen?
 
Warum sollte da der Browser irgendein JS im Dokument ausführen? Der XHR erzeugt kein neues window-Objekt und deswegen wäre das JS auch ziemlich sicher falsch.

Lies' dir einfach den Link durch, den ich oben geschrieben hab'.
 
Naja ich dachte XHR ruft die Seite auf wie ein Browser und als Rückgabewert bekomme ich die fertige Seite so wie sie im Browser auch angezeigt wird

Wenn ich es richtig verstehe müsste ich das hier
Code:
output.innerHTML = html;
        Array.prototype.forEach.call(output.getElementsByTagName("script"), function(scriptNode){
            var newScriptNode = document.createElement("script");
            if (scriptNode.src){
                newScriptNode.src = scriptNode.src;
            }
            newScriptNode.text = scriptNode.text;
            output.replaceChild(newScriptNode, scriptNode);
        });

so umschreiben, das meine chrome extension background page sich das Script aus meinem iframe holt und nochmal ausführt. Richtig? Soweit ich es aber verstehe ist das leider genau mein Problem was nicht geht. Ich hatte ja versucht die Facebook login js SDK direkt vom background script aufzurufen aber das geht nicht, da FB den aufruf direkt von der domäne erwartet wo auch meine app liegt. Daher der workaround mit dem iframe. Ich hatte dazu das hier gefunden: Brian Mayer – Building a Chrome Extension that Connects to a Facebook App

Leider bekomme ich das
Code:
parent.postMessage({connectStatus:"" + response.status + "", userID:"" + uid + "", accessToken:"" + at + ""}, "https://www.<PARENT_PAGE_DOMAIN>"); //This MUST match the root domain where the iFrame will be inserted, or the message won't get passed
 }
von der Webseite nicht hin, da ich dort nicht verstehe was ich als letzten Parameter eintragen muss. die Background seite hat doch gar keine http://www.-Adresse Ich hab verschiedenes ausprobiert, aber das event kommt im parent nicht an

Letztlich will ich folgendes machen: Meine Extension soll automatisch gestartet werden, wenn die Person auf eine bestimmte Seite geht, dann soll sich sich von meiner Homepage wo mein Spiel liegt sich die FB Login Information (Username/ID) holen damit die extension den User identifizieren kann. BEsser wäre es die extension könnte direkt die FB Login Scripte aufrufen aber das geht ja wie gesagt nicht, daher der Umweg über das iframe was das login macht und nur die User Daten zurückliefert.
 
Naja ich dachte XHR ruft die Seite auf wie ein Browser und als Rückgabewert bekomme ich die fertige Seite so wie sie im Browser auch angezeigt wird
Nein - das macht eine HTTP-Request und liefert dir die Antwort als String bzw. versucht das schon irgendwie zu interpretieren, wenn du den responseType gesetzt hast. Aber das ist nur der Anfang von dem, was der Browser dann noch macht, wenn er eine Seite normal anzeigt.
Daher der workaround mit dem iframe.
Welches iFrame?
da ich dort nicht verstehe was ich als letzten Parameter eintragen muss.
Du muss das iFrame doch in irgendeine Seite einfügen - und die hat eine Domain.
 
Zurück
Oben