首页 > 解决方案 > 模拟 window.location 对象

问题描述

我有一个 iFrame,我想在其 src 属性中获取 URL 并获取其内容并使用 docuemnt.write 将其注入 iFrame。所以现在,iFrame 在同一个来源,我可以触摸它的 contentWindow。但是我在使用 window.location 对象的 iFrame 中运行的 JS 文件遇到了一些问题,当然,在我目前的情况下,它是空的(iFrame 没有 src)。所以,代码有一些意想不到的行为:(。我想我有两个选择:

  1. 用匿名函数包装 JS 代码,并将我们的“代理”窗口对象传递给它,如下所示:

    var windowProxy = { location : { origin : "test", search : "test" } }; (function(window){ console.log(window.location.origin); console.log(window.location.search); })(windowProxy);

那行得通,但我认为这种方法会出现更多错误,因为一切也在函数上下文中执行。因此,如果声明全局变量或类似内容的代码发生更改,那么我认为一切都会搞砸。

  1. 第二种方法也是最难实现的方法是解析 JS 并将对 window.location 的调用替换为 window.fakelocation(以 fakelocation 作为我们伪造的 window.location 对象)。

我真的很感激一些建议或其他方法。:)

更新:嗯,我刚刚意识到第一种方法是不可能的,因为我必须创建整个窗口对象,这很荒谬。

所以,我现在只剩下第二种方法了。:(

标签: javascripthtmldom

解决方案


推荐阅读