Ich bin neugierig, ob das folgende Szenario ein Fehler in Chrome ist, der wie erwartet funktioniert, oder Entwicklerfehler.Injizieren von Inhaltsskripts und Anfordern von ursprungsübergreifenden Berechtigungen
Also, ich habe eine Erweiterung. In seinem manifest.json ich für zwei Standorte Cross-Origin-Berechtigungen anfordern:
"permissions": [
"http://www.foo.com/*",
"http://www.bar.com/*"
]
Ich erkläre auch einen Content-Skript:
"content_scripts": [
{
"matches": ["http://www.foo.com/*"],
"js": ["injectedScript.js"]
}
]
Also habe ich darauf hingewiesen, dass ich mag „injectedScript injizieren .js "in alle foo.com-Domains. "injectedScript.js" sieht ungefähr so aus:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = handleStateChange; // Implemented elsewhere.
xhr.open("GET", 'http://www.bar.com/123'), true);
xhr.send();
Jetzt wird ein Iframe zur Seite meiner Chrome-Erweiterung hinzugefügt. Es sieht so aus:
<iframe src="http://www.foo.com/123"></iframe>
Der src dieses Frames entspricht meinem Inhaltsskriptmuster. Wenn also der Rahmen geladen wird, wird injectedScript.js in ihn injiziert. Aber die XMLHttpRequest innerhalb injectedScript schlägt fehl.
Jetzt fragt mich, was erwartetes Verhalten ist. Es ist frustrierend, auf CORS-Probleme zu stoßen, wenn ich die entsprechenden Berechtigungen angefordert habe ... aber ich verstehe auch, dass ich versuche, von einem Ursprung außerhalb meiner Chrome-Erweiterung auf "http://www.bar.com/123" zuzugreifen ... obwohl ein Iframe in die Erweiterung geladen wurde auf die ich Zugriff habe.
Irgendwelche Gedanken von jemandem in der Sache?
EDIT: Wenn Sie sich wundern, was ich aus einem praktischen Standpunkt bekommen könnte - Ich möchte ein wenig Javascript injizieren, getImageData auf einem Video in der injizierten Seite aufrufen können. Das kann ich jedoch nicht, da getImageData denkt, dass die src des Videos verdorbene Daten sind. Ich habe die entsprechenden Berechtigungen angefordert, aber nicht in den Iframe.
UPDATE: Hier ist ein Bild: http://i.imgur.com/PR48HO2.png
Ich bin mit dem gleichen Problem konfrontiert. Ich weiß, dass du herausgefunden hast, was die Ursache ist, und es in deiner (unglücklichen) Erweiterung angesprochen hast. Könnten Sie die Lösung teilen (indem Sie vielleicht selbst eine Antwort hinzufügen)? –