Jestem ciekawy, czy następujący scenariusz to błąd w przeglądarce Chrome, działa zgodnie z oczekiwaniami lub błąd programisty.Wstrzykiwanie skryptów treści i żądanie uprawnień z różnych źródeł.
Mam więc rozszerzenie. W swojej manifest.json zażądać uprawnień krzyż pochodzenia dla dwóch stron:
"permissions": [
"http://www.foo.com/*",
"http://www.bar.com/*"
]
Oświadczam również skrypt treści:
"content_scripts": [
{
"matches": ["http://www.foo.com/*"],
"js": ["injectedScript.js"]
}
]
Więc, ja wskazano, że chciałbym, aby wprowadzić „injectedScript .js "do wszystkich domen foo.com. "injectedScript.js" wygląda tak:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = handleStateChange; // Implemented elsewhere.
xhr.open("GET", 'http://www.bar.com/123'), true);
xhr.send();
Teraz element iframe jest dodawany do mojej strony rozszerzenia Chrome. Wygląda to tak:
<iframe src="http://www.foo.com/123"></iframe>
Src tej ramki pasuje do wzorca skryptu treści. W związku z tym, gdy ramka się ładuje, wstrzykuje się do niej skrypt JavaScript.js. Ale XMLHttpRequest wewnątrz injectedScript kończy się niepowodzeniem.
Teraz to mnie zastanawia, jakie jest oczekiwane zachowanie. Forsowanie problemów z CORS jest frustrujące, gdy poprosiłem o odpowiednie uprawnienia ... ale mogę też zrozumieć, że próbuję uzyskać dostęp do "http://www.bar.com/123" z pochodzenia spoza mojego rozszerzenia chrome ... mimo że element iframe jest ładowany do rozszerzenia do których mam pozwolenie na dostęp.
Jakieś przemyślenia od kogoś w tej sprawie?
EDIT: Jeśli zastanawiasz się, co mogę trafiać na z praktycznego punktu widzenia - Chciałbym wstrzyknąć jakiś skrypt, który można nazwać getImageData na filmie w wtryskiwanego stronie. Jednak nie mogę, ponieważ getImageData uważa, że src wideo jest zanieczyszczone danymi. Zażądałem odpowiednich uprawnień, ale nie spływają one do elementu iframe.
UPDATE: Oto zdjęcie: http://i.imgur.com/PR48HO2.png
Jestem stoi ten sam problem. Wiem, że odkryłeś przyczynę problemu i rozwiązałeś to w swoim (niefortunnym) przedłużeniu. Czy możesz podzielić się rozwiązaniem (może sam dodając odpowiedź)? –