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

Chrome Web App

Für das ganz rudimentäre Beisplie funktioniert sowas auf deiner Seite:
Code:
<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Fenstertitel</title>
</head>
<body>
inhalt
<script type="text/javascript">
document.body.onclick = function(){
	window.postMessage({}, '*');
};
</script>
</body>
</html>
 
Für das ganz rudimentäre Beisplie funktioniert sowas auf deiner Seite
Ich begreife es nicht.
Habe schon wieder in der Console "Port error: Could not establish connection. Receiving end does not exist." stehen und trotz Klickens tut sich nichts.
Was mache ich denn nur falsch?
Kannst du mir mal eine Checkliste machen, was ich tun muss, um das ans Laufen zu bringen?
 
Ah... ich hab' im Manifest festgelegt, dass das Skript nur dann injected wird, wenn die Seite von 127.0.0.1 kommt.
Wenn deine Testseite von wo anders kommt, musst du das im Manifest ändern.
 
Ah... ich hab' im Manifest festgelegt, dass das Skript nur dann injected wird, wenn die Seite von 127.0.0.1 kommt.
Wenn deine Testseite von wo anders kommt, musst du das im Manifest ändern.
OK, hatte gehofft, dass Chrome von selbst erkennt, wenn ein URL lokal ist, scheint aber nicht so. Hatte es aber auch nicht getestet, war einfach davon ausgegangen.
Habe also einen ersten verhaltenen Erfolg zu verzeichnen.
Nach Klick in den body werden Bildchen geladen und angezeigt.
Allerdings bleibt die Fehlermeldung "Port error: Could not establish connection. Receiving end does not exist." in der Console bestehen.
Hast du oder ein anderer Leser eine Idee, wie ich die weg bekomme?

Mein Ziel ist im Moment erst einmal, mit einem ganz einfachen Beispiel eine fehlerfreie Hin- und Herkommunikation zwischen einem Dokument und einer Web App hinzubekomen.
 
Hm... also ich bekomme keine Fehlermeldung - hast du deine "alte" Erweiterung noch installiert?
Das muss es gewesen sein. Hab mal alles entfernt und dein Test neu installiert. Dabei die ganze Zeit die Console im Auge behalten, jetzt kommt kein Fehler mehr.
Du bist ein Schatz, Korbinian!
Jetzt werde ich das mal genauer studieren und mich dann bestimmt nochmal melden :)
 
Ich nähere mich dem Ziel :)
Im nächsten Schritt möchte ich jetzt nämlich das Ergebnis der inject.js an mein Dokument zurück geben, damit mein Dokument es verarbeiten kann. Später brauche ich das, weil mein Dokument das Ergebnis zurück an meinen Server senden soll.

Im Moment behelfe ich mir im Beispiel damit, dass in der inject.js das Ergebnis an das Dokument zurück soll mit document.testausgabe(resp);
Im Dokument gibt es die neue function testausgabe().

inject.js:
HTML:
var MyAPI= {
	getKitten: function(){
		chrome.extension.sendMessage("getKitten", function(resp){
			document.testausgabe(resp);
//			document.body.innerHTML = resp;
		});
	}
};

window.addEventListener("message", function(event) {
    // We only accept messages from ourselves
    if (event.source != window)
      return;

    MyAPI.getKitten();
}, false);

Mein Dokument test_chrome.html:
HTML:
<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Fenstertitel</title>
</head>
<body>
inhalt
<script>
function testausgabe(v) {
	document.body.innerHTML = v;
}
document.body.onclick = function(){
	window.postMessage({}, '*');
};
</script>
</body>
</html>

Leider kommt diese Fehlermeldung in der Konsole:
Error in event handler for 'undefined': Object #<HTMLDocument> has no method 'testausgabe' TypeError: Object #<HTMLDocument> has no method 'testausgabe'
at chrome-extension://amacmlhdpcdglgijnmndeelnnnocbaia/inject.js:4:13
at miscellaneous_bindings:288:9
at chrome.Event.dispatchToListener (event_bindings:387:21)
at chrome.Event.dispatch_ (event_bindings:373:27)
at chrome.Event.dispatch (event_bindings:393:17)
at Object.chromeHidden.Port.dispatchOnMessage (miscellaneous_bindings:254:22)

Daher meine Frage: Mit welcher Syntax kann der Code der inject.js functions in meinem Dokument aufrufen?
 
Du kannst aus der inject.js gar keine Funktion in deinem Dokument aufrufen, da die verschiedene Scopes haben.

Das musst du wieder über Messages machen:
inject.js
Code:
var MyAPI= {
	getKitten: function(){
		chrome.extension.sendMessage("getKitten", function(resp){
			window.postMessage({type: "giveKitten", value: resp}, '*');
			//document.body.innerHTML = resp;
		});
	}
};

window.addEventListener("message", function(event) {
    // We only accept messages from ourselves
    if (event.source != window)
      return;
	if (event.data.type && event.data.type === "getKitten"){
		MyAPI.getKitten();
	}
}, false);

Beispielseite:
Code:
<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Fenstertitel</title>
</head>
<body>
inhalt
<script type="text/javascript">
document.onclick = function(){
	window.postMessage({type: "getKitten"}, '*');
};
window.addEventListener("message", function(event) {
    // We only accept messages from ourselves
    if (event.source != window)
      return;
	if (event.data.type && event.data.type === "giveKitten"){
		alert(event.data.value);
	}
}, false);
</script>
</body>
</html>
Da musst du aber noch ein paar Sicherheitshinweise beachten (z.B. die in https://developer.mozilla.org/de/docs/DOM/window.postMessage).
 
Zurück
Oben