/ / Ako zabrániť prvkom iframe zmeniť kontext prehliadania na najvyššej úrovni (top.history)? - javascript, html5, iframe, html5-history

Ako zabrániť iframe modifikovať kontext prehliadania najvyššej úrovne (top.history)? - javascript, html5, iframe, html5-história

Snažím sa vytvoriť webovú aplikáciu na správu rozloženia, ktorá v nej umožňuje hosťovať ďalšie podradené aplikácie (rovnaká doména).

Prehľad

V súčasnej dobe môže hlavná aplikácia sledovať akékoľveknavigácia v podradenej aplikácii a vedenie navigačného záznamu v hlavnej aplikácii. Používateľ môže kliknúť na tlačidlo späť alebo dopredu a prejsť na poslednú stránku. Všetko funguje dobre, až kým nenájdem nejaký kód v podradenej aplikácii, ktorý sa programovo zmení location.hash nehnuteľnosť alebo volanie history.pushState metóda v detskej aplikácii.

Prehliadač zvyčajne automaticky pridá starý stav histórie do zásobníka histórie podradenej aplikácie, ktorý je správny. Moderný prehliadač však vždy zdieľať históriu zásob medzi hlavná aplikácia a všetky ostatné prvky iframe (aplikácia pre deti), ktorá vedie k zlomenej histórii hlavného použitia. Používateľ nemôže v prehliadači kliknúť späť na predchádzajúcu stránku, ktorá bola navštívená pred hlavnou aplikáciou.

Podľa W3C

Na história spoločných relácií a kontext prehliadania na najvyššej úrovni je únia všetkých histórií relácií všetkýchprezeranie kontextov všetkých aktívne objekty dokumentu, ktoré zdieľajú tento kontext prehliadania na najvyššej úrovni, so všetkými záznamami, ktoré sú aktuálnymi záznamami v príslušných položkách história relácií bola odstránená, s výnimkou aktuálneho zadania kĺbu história relácie.

Mám 2 otázky.

  1. Je možné vytvoriť samostatnú históriu pre každý iframe? Skúšam nastaviť document.domain ako toto.

    • hlavná doména aplikácie je „apps.site.com“.
    • doména podradenej aplikácie je „apps.site.com“, ale ja ju zmením na „site.com“, aby som zabránil skriptovaniu medzi stránkami. Ale nefunguje to, pretože prehliadač synchronizuje túto históriu, nie iframe.
  2. Existuje nejaký spôsob, ako zabrániť iframe v navigácii / hashchange / pushState? Moja súčasná myšlienka je oprava všetkých súvisiacich vlastností / metód a tiež ich počúvanie click udalosť zabrániť zmene histórie prehľadávača. Nie som si istý, či to bude fungovať, a zdá sa mi to príliš riskantné.

Vďaka,

Ref: https://html.spec.whatwg.org/multipage/browsers.html#traverse-the-history

odpovede:

0 pre odpoveď č. 1

Viem, že Chrome má novú značku, ktorá sa spúšťa v samostatnom procese ako vaša aplikácia. Môžete to skontrolovať: https://developer.chrome.com/apps/tags/webview

Ale táto značka nie je niečo, čo HTML5 štandardizovalo. Väčšina ostatných hlavných prehľadávačov to nepodporuje.

Ale pre Iframe je odpoveď nie.