代码之家  ›  专栏  ›  技术社区  ›  Bambax

利用文件协议在chrome/webkit中调用javascript函数

  •  2
  • Bambax  · 技术社区  · 14 年前

    我开发了一个应用程序,它在一个框架中有一个项目列表;当一个人点击一个项目时,它在另一个框架中做一些事情(加载图像)。

    这在所有浏览器中都能正常工作,包括chrome 3;现在在firefox中仍然可以正常工作,但在chrome的最新版本中(我相信从4开始),它会抛出以下错误:

    不安全的javascript尝试从url(…)的帧访问url(…)的帧。 域、协议和端口必须匹配。

    这显然是一个安全“功能”,但有可能绕过它吗?

    下面是一个简单的测试:

    索引:

    <html>
      <frameset cols="50%,50%">
        <frame src="left.html" name="left"/>
        <frame src="right.html" name="right"/>
        </frameset>
      </html>
    

    HTML:

    <html>
      <body>
        <a href="javascript:parent.right.test('hello');">click me</a>
        </body>
      </html>
    

    HTML:

    <html>
      <body>
        <script>
          function test(msg) {
            alert(msg);
            }
          </script>
        </body>
      </html>
    

    上面的代码在Firefox3.6和Chrome3中都有效,但在Chrome5中却抛出了上面的错误…

    编辑 :

    • 向frameset元素添加了@cols属性
    • 事实上,它在chrome中工作,前提是并且仅当页面使用http协议(并且来自同一个域)时,但是 我的问题是当页面是本地的并且是从一个文件/协议提供服务时 . 然后它可以在Firefox(所有版本)和Chrome3上运行,但不能在Chrome5上运行(我没有Chrome4,所以我不了解具体的版本(也不知道是否可以下载具体的Chrome版本?)--但对于Chrome5,我很确定它不起作用)。
    2 回复  |  直到 13 年前
        1
  •  1
  •   Community c0D3l0g1c    7 年前

    请参阅与此密切相关的问题的答案: Call a JavaScript function defined in an iframe in Chrome using the file protocol .

    简而言之,使用 --allow-file-access-from-files “解决”问题,只要错误不会被报告。

    当然,由于您是在CD上分发文件,因此不太可能将其视为实际的解决方案。我推荐主演 Chromium bug 47416 鼓励铬的开发者使铬更符合壁虎的行为。

        2
  •  1
  •   T.J. Crowder    14 年前

    我试过你的测试页面,在windows上chrome 4.1.249.1045(以及firefox 3.6.3和ie7)上运行得很好 [在解决以下问题之后] )。所以我和佩卡在一起(和往常一样):我想问题一定出在别处。

    它在IE7中不起作用,我花了很长时间才弄明白为什么不行:你也需要 rows cols frameset 标签,否则IE只加载一帧。(The validator 如果我问的话会告诉我的。)

    推荐文章