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

Chrome Web App

mikdoe

Moderator
Hi!
Hat jemand schon Erfahrung mit dem Umgang mit den Web Apps in Chrome?
Ich habe hier eine crx Datei als Web App erfolgreich in Chrome installiert und möchte jetzt auf deren Funktionen zugreifen.
Wie macht man das? Gibt es ein Tut dafür?
 
Das würd' mich wundern, wenn du einfach von irgendwelchen Seiten auf Browser Apps zugreifen könntest - das wäre ja ein riesen Sicherheitsloch. Das muss definitiv genauer spezifiziert sein.
 
Ich sehe da jetzt etwas klarer, kann es aber nach wie vor leider nur allgemein fragen.
Und zwar möchte ich gern eine .js Datei und die manifest Datei als .crx Datei packen und als Chrome App installieren, das ist soweit kein Problem, bekomme ich hin.
Diese .js Datei enthält function's. Nun möchte ich mit einer Webseite die der Browser vom Server lädt auf diese function's zugreifen. Das Wesentliche daran ist, dass es sich dabei um einen Querzugriff handelt, der ansonsten von der SOP verboten würde.
Dies erhoffe ich mir dadurch zu umgehen, denn der Benutzer hat ja bei Installation der .crx App schon die Sicherheitsabfrage bestätigt.
Geht das so, wie ich mir das vorstelle? Werde das jetzt parallel auch mal ein wenig antesten.
Danke für alle Mitstreiter im Borg Kollektiv :satellite:
 
OK, hier mein bisher leider nicht funktionierender Versuch:

test.js:
HTML:
function test(v) {
	alert(v);
}

manifest.json:
Code:
{
	"manifest_version": 2,
	"name": "meintest",
	"description": "Kleine Testanwendung",
	"version": "1.0",
	"permissions": [
		"<all_urls>"
	]
}

Die beiden in ein eigenes Verzeichnis gelegt und als "Entpackte Erweiterung" geladen:
fehler_chrome.jpg

test_chrome.html:
HTML:
<!DOCTYPE HTML> 
<html> 
	<head> 
		<title>Test Zugriff auf Chrome App</title> 
	</head>
	<body>
		<script>
			chrome.extension.test('Hier mein Testtext');
		</script>
	</body>
</html>

Meldung in der Chrome Console:
Uncaught TypeError: Cannot call method 'test' of undefined

Kann ich zwar nachvollziehen, weiß aber nicht, was ich falsch mache.
Wer weiß mir zu helfen?
Danke
 
Wenn ich
Code:
chrome.extension.meintest.test('Hier mein Testtext');
versuche kommt die Meldung "Uncaught TypeError: Cannot read property 'meintest' of undefined"

Wie lautet die Syntax korrekt?
 
und damit hat's funktioniert.
Wie genau bist du vorgegangen? Ich habe folgendes gemacht:

manifest.json:
Code:
{
	"manifest_version": 2,
	"name": "meintest",
	"description": "Kleine Testanwendung",
	"version": "1.0",
	"permissions": [
		"<all_urls>"
	]
}

test.js:
HTML:
var port = chrome.extension.connect();

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

    if (event.data.type && (event.data.type == "FROM_PAGE")) {
      console.log("Content script received: " + event.data.text);
      port.postMessage(event.data.text);
    }
}, false);

Beide in einen Ordner gelegt und diesen als "Entpackte Erweiterung" in Chrome geladen.

Dann vom Server die test_chrome.html ausgeführt:
HTML:
<!DOCTYPE HTML> 
<html> 
	<head> 
		<title>Test Zugriff auf Chrome App</title> 
	</head>
	<body>
		<div id="theButton" style="cursor:pointer;">Hier klicken</div>
		<script>
			document.getElementById("theButton").addEventListener("click", function() {
				window.postMessage({ type: "FROM_PAGE", text: "Hello from the webpage!" }, "*");
			}, false);
		</script>
	</body>
</html>

Nun die Console mit F12 geöffnet und den Link angeklickt. Hatte sogar Chrome vorher neu gestartet.
Nun hätte ich erwartet, dass nach einem Klick in der Console "Hello from the webpage!" erscheint. Aber leider bleibt die Console des Chrome leer.
Bitte sag mal, was du genau gemacht hast.
 
Dein Manifest ist nicht vollständig - dort musst angeben, dass die test.js als content script geladen werden soll.
 
Dein Manifest ist nicht vollständig - dort musst angeben, dass die test.js als content script geladen werden soll.
Stimmt. Danke dir.

Jetzt scheint mein test.js injected zu werden und ich erhalte schon vor dem Anklicken in der Console die Ausgabe
Port error: Could not establish connection. Receiving end does not exist.

Und nach dem Anklicken kommt
Uncaught Error: Attempting to use a disconnected port object

chrome.jpg

Sieht das bei dir auch so aus? 'ne Idee dazu?
 
Ich hatte zum Testen den Port rausgenommen... das kann auch gar nicht funktionieren, da du ja gar keine weiteren Extension Seiten hast - d. h. du willst hier mit etwas kommunizeren, das du gar nicht hast.
 
Ich hatte zum Testen den Port rausgenommen... das kann auch gar nicht funktionieren, da du ja gar keine weiteren Extension Seiten hast - d. h. du willst hier mit etwas kommunizeren, das du gar nicht hast.
Was ich möchte ist folgendes: Ich möchte die SOP umgehen. Das heißt, meine Internetseite ruft eine function in der Chrome App auf, diese App macht einen Request an einen fremden Server, die Response dieses Servers soll an meine Internetseite zurück gegeben werden, damit diese einen Request an meinen Server macht und die Ergebnisse mitteilt.
Denkst du, das geht damit? Wie müsste das aussehen?
 
Ich denke schon, dass das geht (soweit ich verstanden habe, haben die content scripts die gleichen Berchtigungen wie die komplette Erweiterung.

Wie das genau aussieht, hängt davon ab, was du mit Ergebnisse meinst.

Aber warum machst du das überhaupt über eine Chrome Extension nicht komplett auf deinem Server? Der kann doch auch Anfragen an fremde Server schicken...
 
Aber warum machst du das überhaupt über eine Chrome Extension nicht komplett auf deinem Server? Der kann doch auch Anfragen an fremde Server schicken...
Weil es etwas gibt, dass ich in JS geschrieben aus einer fremden Quelle dazu bekommen kann. Für den Server gibt es nichts zu kaufen. Und node.js kommt hierfür nicht in Betracht. Selbst nachbauen scheidet komplett aus, weil es einer ständigen Wartung unterliegt, die ich nicht machen möchte.
Deshalb möchte ich diese - nenne es mal - JS Bibliothek gern als Content Script einbinden.
Wie sieht denn dein Test Content Script aus ohne diese Fehlermeldungen?
 
Deshalb möchte ich diese - nenne es mal - JS Bibliothek gern als Content Script einbinden.
Wie sieht denn dein Test Content Script aus ohne diese Fehlermeldungen?
Du kannst doch eine JS Bibliothek in jede Seite einbinden, von jeder Seite, die du möchtest. Da gibt es keine Einschränkungen. Das sieht so aus:

HTML:
<script src="http://example.com/test.js"></script>
 
Du kannst doch eine JS Bibliothek in jede Seite einbinden, von jeder Seite, die du möchtest. Da gibt es keine Einschränkungen. Das sieht so aus:
Das ist mir bekannt. Aber diese Bibliothek führt Ajax Request gegen einen fremden Server aus. Die SOP würde das deshalb in jedem Browser verbieten. Daher brauche ich die Möglichkeit, JS auszuführen, das keinen SOP Beschränkungen unterliegt. Kennst du noch eine andere Möglichkeit als mit einer Chrome Web App?
 
Zurück
Oben