Nedávno jsem spouštěl svůj vlastní skript pro nahrávání AJAX, odeslal jsem formulář do skrytého prvku IFRAME a pomocí události zatížení jsem věděl, kdy bylo nahrávání dokončeno. Když bylo nahrávání dokončeno, chtěl jsem získat přístup k obsahu IFRAME, abych mohl ověřit, že nahrávání proběhlo úspěšně. Překvapivě jsem narazil na následující chybu JavaScript:
Error: Permission denied to access property 'document'
Pokud jste používali jQuery, může se vám místo toho zobrazit tato chyba:
Error: Permission denied to access property 'nodeType'
To mě zmátlo, protože jsem věděl, že můj IFRAME přistupuje k adrese na stejném hostiteli, včetně protokolu. Poté, co jsem si vytrhl vlasy a poslal prosbu o nápady na Twitter, Daniel Buchner zmínil záhlaví na straně serveru, které jsem potřeboval upravit, aby umožňoval přístup k uzlům tohoto rámce:x-frame-options
. Záhlaví může mít hodnoty NONE
nebo SAMEORIGIN
a nastavení x-frame-options
až SAMEORIGIN
opraven můj problém!
Pokud se vám bude i nadále zobrazovat chyba „Oprávnění odepřeno“, je velmi možné, že se pokoušíte provést požadavek napříč původem, a to vám jednoduše neumožní přístup k obsahu IFRAME, pokud nebyla přidána konfigurace CORS.