【问题标题】:How to get access of document object of a window opened with window.open?如何访问使用 window.open 打开的窗口的文档对象?
【发布时间】:2016-12-02 22:13:41
【问题描述】:

我通过在浏览器控制台中编写以下代码通过 javascript 在新选项卡中打开一个网站:

var win = window.open("http://staging.redefinewebs.in/wildgoose-const/wp-admin/post-new.php", "mywin", '');

现在我想在新打开的选项卡的字段中添加文本。但为此我需要访问win.document。当我在控制台中写win.document 时,出现以下错误:

Error: Permission denied to access property "document"

如果我在新标签页中打开其他网站,则不会出现此错误。所以,

如何使用 window.open 访问在新选项卡中打开的窗口的文档对象?

【问题讨论】:

  • 您不能写入远程站点上的文档,除非它专门被写入允许您这样做,该页面没有,所以您不能。唯一的选择是使用服务器端脚本代理页面。

标签: javascript html wordpress dom browser


【解决方案1】:

如果子窗口的 DOM 违反了同源策略,您将无法访问它。

只有满足以下三个条件,才能访问子窗口的DOM。

  • 两个窗口具有相同的协议 (http/https)
  • 两个窗口的主机相同(google.com 和 news.google.com 不同)
  • 两个窗口具有相同的端口(google.com:80 和 google.com:443 不同)

【讨论】:

    【解决方案2】:

    如何使用 window.open 访问在新选项卡中打开的窗口的文档对象?

    如果窗口是从不同的来源打开一个文档,你不会;由于Same Origin Policy,浏览器拒绝跨域访问。从您问题中的错误来看,这里似乎就是这种情况。

    如果窗口包含来自同一来源的文档,您可以按所示访问它;但请注意,在您调用 window.open 后,它可能仍会立即加载,您可能需要等待它完成加载,可能是 DOMContentLoaded 事件。

    【讨论】:

    • 我在登录时以某种方式成功访问了 gmail.com 的文档。
    • @user31782:我怀疑这是观察错误(例如,您可能在 gmail.com 页面的控制台中工作?)。
    • 没有。如果只是在 Firefox 中打开一个新的空白选项卡并使用 window.open 打开 gmail,我可以访问它的文档对象。可能是我的新标签与谷歌服务器相关联?
    • @user31782:如果你的意思是从控制台,控制台是特殊的。
    猜你喜欢
    • 2011-11-26
    • 2019-11-23
    • 2012-02-20
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2011-03-03
    相关资源
    最近更新 更多