Autor Zpráva
Samsonweb
Profil *
Dobrý den,
nevíte prosím jaký příkaz slouží k vypnutí Javascriptu na stránce?
Zkoušel jsem funkci
throw new Error("");
ale to přeruší provádění pouze ve stejném bloku <script>. Scripty v ostatních blocích zablokovány nejsou.
Děkuji.
Witiko
Profil
To snad díky closure ani není možné. Na co to potřebuješ?
ah01
Profil
Samsonweb:
Myslím, že docela spolehlivě bude fungovat toto:

while(1);

Návštěvník tvé stránky si pak JS vypne sám (nebo ji už nikdy nenavštíví – to je drobný vedlejší efekt).

Ale teď vážně. K čemu je vypnutí Javascriptu Javascriptem dobré?
Timy
Profil
ah01:
Nevím na co to potřebuje zrovna Samsonweb, ale hodilo by se to třeba u SuperGenPass, což je bookmarklet na generování hesel a moc se nehodí, aby během generování hesla běžel na stránce jiný JavaScript, který by toto heslo mohl odchytávat, jak je ukázáno zde. Takže by se hodilo, aby bookmarklet na začátku vypnul případný JavaScript na stránce a po skončení generování ho zase zapnul.

Dost možná by se našel jiný způsob jak to zabezpečit, nějak moc jsem nad tím nepřemýšlel, ta bezpečnostní chyba mi moc nevadí.
Witiko
Profil
Generování hesla můžeš provést v anonymní funkci, kterou jiný javascriptový script jen těžko odchytí. Deaktivace javascriptu javascriptem (kdyby něco takového existovalo) by navíc odrovnala i iniciační script.
Timy
Profil
Witiko:
Tam jde o to, že musíš nejdříve do inputu napsat své heslo, pomocí něhož se následně vygeneruje pseudonáhodné heslo. A toto tvé vlastní heslo může být z inputu jednoduše ukradeno.

Deaktivace javascriptu javascriptem (kdyby něco takového existovalo) by navíc odrovnala i iniciační script.
Samozřejmě se nesmí odrovnat úplně, ideálně jen nějaký "namespace". Já nějak moc nepředpokládám, že by to šlo, ale ideálně aby šlo odrovnat všechen javascript mimo ten, který sám vyvolám přes adresní řádek, tj. přes bookmarklet. Například když do stránky chci přidat javascript, můžu jednoduše přidat do HTML element script a bude to fungovat – stejným postupem by teoreticky mohlo jít JavaScript odstranit.
Witiko
Profil
Držím palce.
Samsonweb
Profil *
Witiko, ah01:
Proč to potřebuji není vůbec důležité. Jeden skript způsobuje vytuhnutí v Internet Exploreru 8 a potřebuji ho při splnění určitých podmínek vypnout. Mohu měnit pouze jiný připojený soubor a do zbytku se zasahovat nedá.
Witiko
Profil
Asi ti neporadím(e), jediná logická rada je script, který způsobuje vytuhnutí MSIE, nepoužívat.
ah01
Profil
Samsonweb:
To co popisuješ IMHO nejde. Stejně tak, problém co píše Timy. JS běží v jednom jmenném prostoru, která sdílí všechny skripty na stránce (je jedno odkud pochází), takže jde vypnout všechno nebo nic. Existují snahy pro vyšší bezpečnost JS jako Caja nebo ADsafe, to ale funguje (no, oni jsou to spíš návrhy) na jiném principu.
Fred
Profil
nestačilo by odebrat eventy? https://www.squarefree.com/bookmarklets/zap.html#zap_events http://groups.google.com/group/comp.lang.javascript/msg/fe9025326f5ae177?hl=en&lr&ie=UTF-8&oe=UTF-8&pli=1
Samsonweb
Profil *
Witiko:
O to se právě snažím. Ten skript se smazat nedá a spouští se jako poslední. Většinou provádí nějaké užitečné věci. Nejde ani opravit, protože ho generuje aplikace.

V podstatě bych potřeboval něco jako následující funkci, která by zastavila pouze Javascript a HTML kód normálně zobrazila. Může se zavolat pouze skriptem v<head>.

function die(error) {
  if (window.stop) window.stop()
  else if (document.execCommand) document.execCommand("Stop")
  throw new Error(error)
}

Fred:
Skript si události znovu přeregistruje i s onload a dalo by se použít pouze onunload, což už je dost pozdě.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: