Autor Zpráva
Witiko
Profil
S tím, jak byla přidána nativní podpora userScriptů do Google Chrome, jsem se rozhodnul napsat několik zjednodušení pro specifické stránky. Zjistil jsem však, že userScripty jsou zvláštním způsobem omezovány. Zkuste si přes konzoli spustit následující kód:

var a = window.open(location.href);
alert(a);


Zcela správně se provede a vyskočí hláška oznamující přítomnost pointeru na daný objekt okna v proměnné a. Nyní si definujme testovací userScript např. se jménem test.user.js a shodným obsahem a nejlépe i nějakou nadefinovanou hlavičkou, nějak takto:
// ==UserScript==
// @include adresa, kde se script provede
// ==/UserScript==

var a = window.open(location.href + "#");
alert(a);

abychom předešli zacyklení. Ve výsledku se kýžené okno otevře, ale alert vyplivne undefined, což je přesně obsah dané proměnné. Nepředáním pointeru se userScriptu zavírá cesta k práci s jiným oknem, což celkem snižuje jeho použitelnost a robustnost jako platformy pro psaní scriptů.

Ví někdo o řešení / důvodu tohoto omezení / dalších milých překvapeních?

Prozatím to budu řešit dynamickým vložením scriptu na dané stránky pomocí userScriptu, přičemž script vložený již není omezený. Ale proč proboha taková harakiri?

Edit: Zdá se, že řešením by mohla být proměnná unsafeWindow.
Edit 2: Už je mi to jasné, userScript pracuje ve svém vlastním scope, aby nedocházelo k zaneřádění global scope stránky.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0