2010-11-11 2 views
1

Nous avons une application qui reconstruit des sites Web externes dans un Iframe à partir de notre domaine afin que nous puissions utiliser des outils qui s'exécutent dans le navigateur pour inspecter le site Web externe. Ceci est une exigence incontournable puisque nous devons recueillir des informations sur la page externe en utilisant JavaScript. Si la page n'a pas été reconstruite à partir de notre domaine, nous serions confrontés à des problèmes de script intersite.Est-il possible de sandbox JavaScript dans un IFrame où le contenu IFrame s'exécute sous le même domaine?

Le problème est que les scripts sur certaines pages redirigent hors de l'iframe, ce qui empêche notre outil de fonctionner.

Ma question est de savoir s'il existe un moyen de permettre aux scripts de s'exécuter dans l'iframe, mais pas d'affecter la page qui contient le iFrame?

Un espoir qui a du sens - merci!

Répondre

1

Non, je ne le pense pas.

Si l'Iframe est chargé depuis le même domaine, tout script aura un accès complet à la page. La redirection vers l'extérieur de la page à laquelle vous faites référence est la protection de la page contre le piratage lorsqu'un autre site essaie d'utiliser le contenu de la page. En évitant une iframe, ils évitent cela.

0

Vous pouvez essayer d'utiliser une fenêtre séparée (window.open) pour charger les sites externes reconstruits au lieu d'un iframe. Tant qu'ils sont sur le même domaine, ils seront toujours en mesure de communiquer, mais la fenêtre enfant ne sera pas susceptible de jouer avec votre fenêtre principale. Sinon, votre fenêtre externe ne peut rien faire et se trouve dans un (sous) domaine différent de votre fenêtre de contrôle. Votre fenêtre de contrôle est une iframe dans votre fenêtre externe, et le site externe reconstruit est un autre iframe partageant le même domaine que votre cadre de contrôle. Maintenant, si votre iframe 'externe' essaie de faire quelque chose avec window.top (en plus de naviguer), il échouera à cause de la politique interdomaine, mais votre iframe de contrôle partagera le même domaine que votre iframe 'externe', donc vous pouvez inspecter et manipulez-le. Si vous utilisez la seconde approche, les cadres pourront toujours naviguer dans la fenêtre supérieure. Vous pouvez l'empêcher en ajoutant quelque chose comme ça dans la fenêtre du haut:

window.onbeforeunload = function(){return '';}; 

Maintenant, vous serez invité avec une boîte de dialogue si quelque chose essaie de naviguer dans la page, et vous pouvez interrompre la navigation. Cela corrigera probablement votre approche actuelle par elle-même, mais il peut être préférable d'avoir la fenêtre supérieure sur un domaine séparé au cas où le site externe essaye de faire quelque chose d'inattendu avec lui.

Questions connexes