【问题标题】:How can I create a function in another frame?如何在另一个框架中创建函数?
【发布时间】:2011-10-01 00:55:17
【问题描述】:

我有一个第三方生成的框架集(来自帮助系统),我可以将代码添加到包含我的内容页面的子框架中。我无法修改其他框架集内容,因为它是由构建过程生成的。

我可以在每个加载到子框架的 HTML 内容页面上都有一些 js 代码 myhandler()。这个myhandler() 被触发以在顶部框架中发生动作时被调用。

我想在子框架中创建函数,但它由父(顶部)框架拥有,因此它只创建一次,这意味着我可以测试 top.myhandler 是否已经设置,如果是,它只是重用它.

当子框架加载了不同的 HTML 内容时,当父操作触发对它的调用时,在前一个内容页面中创建的 myhandler() 函数将不再可访问。

这在 javascript 中是否可以让一个框架在另一个框架中创建一个函数?或者有其他解决方案吗?

【问题讨论】:

    标签: javascript function frames


    【解决方案1】:

    跨框架javascript有1个条件:所有涉及的页面(在不同框架中)都需要在同一个域中。如果页面位于不同的域或子域 - 出于安全目的,跨框架 javascript 访问将受到限制。

    假设您有一个包含 2 个页面的框架集:index.html 和 index2.html

    如果这些页面位于同一个域中 - 它们将共享相同的 javascript 命名空间,即所有链接到 index.html 的 javascript 库都可以从 index2.html 访问,反之亦然。

    如果页面位于同一域的不同子域中 - 可以升级多个级别。例如:

    frame1 contains:    http://myrepo.site.com/index.html
    frame2 contains:    http://another.site.com/index2.html
    

    您可以同时设置(在 JavaScript 中):document.domain = "site.com" 之后 - 两个页面上的 javascript 代码将开始互相看到,就像这些页面在同一个域中一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      相关资源
      最近更新 更多