如何获取iframe的当前位置?

stu*_*hat 46 javascript asp.net iframe dom

我已经构建了一个基本的数据输入应用程序,允许用户浏览iframe中的外部内容并从同一页面快速输入数据.其中一个数据变量是URL.理想情况下,我希望能够使用javascript将iframe当前网址加载到文本框中.我现在意识到,由于安全问题,这不会发生.

有人在服务器端做过什么吗?或者知道浏览器控件中的任何.Net浏览器.最终目标是为用户提供一种简单的方法来提取他们在iframe中查看的页面的网址.它不一定是iframe,浏览器中的浏览器将是理想的.

谢谢,亚当

Joa*_*ela 50

我没有在Firefox 3的一些测试对比的价值.src,并.documentWindow.location.hrefiframe.(注意:在Chrome中documentWindow调用contentDocument它,因此不会.documentWindow.location.href在Chrome中使用.contentDocument.location.href.)

src始终是在没有用户交互的情况下在iframe中加载的最后一个URL.即,它包含URL的第一个值,或者您从包含窗口使用Javascript设置的最后一个值:

document.getElementById("myiframe").src = 'http://www.google.com/';
Run Code Online (Sandbox Code Playgroud)

如果用户在iframe内导航,则无法再使用src访问URL的值.在前面的示例中,如果用户离开www.google.com,您执行以下操作:

alert(document.getElementById("myiframe").src);
Run Code Online (Sandbox Code Playgroud)

您仍然可以获得" http://www.google.com ".

documentWindow.location.href 仅当iframe包含与包含窗口位于同一域中的页面时才可用,但如果它可用,则它始终包含URL的正确值,即使用户在iframe中导航也是如此.

如果您尝试访问documentWindow.location.href(或任何内容documentWindow)并且iframe位于不属于包含窗口的域的页面中,则会引发异常:

document.getElementById("myiframe").src = 'http://www.google.com/';
alert(document.getElementById("myiframe").documentWindow.location.href);
Error: Permission denied to get property Location.href
Run Code Online (Sandbox Code Playgroud)

我没有测试任何其他浏览器.

希望能帮助到你!


小智 19

document.getElementById('iframeID').contentWindow.location.href
Run Code Online (Sandbox Code Playgroud)

您根本无法访问跨域iframe位置.

  • 如果浏览器允许的话,这很简单.您将在我的答案中看到完全相同的DOM路径,这在Safari,Chrome,Firefox 3+或IE*中不起作用,因为它不安全. (4认同)
  • 正如我在我的回答中所指出的,如果iframeID中的url位于包含窗口的域之外,则这不起作用. (2认同)

小智 0

这有帮助吗?

http://www.quirksmode.org/js/iframe.html

我只在 Firefox 中测试过这个,但如果你有这样的东西:

<iframe name='myframe' id='myframe' src='http://www.google.com'></iframe>
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方式获取其地址:

document.getElementById('myframe').src
Run Code Online (Sandbox Code Playgroud)

不确定我是否正确理解你的问题,但无论如何:)

  • 这只会给你初始状态,而不是当前状态 (3认同)