使用文件协议调用 Chrome 中 iframe 中定义的 JavaScript 函数

2024-04-01

这个问题与此处提出的问题的完全更新版本非常相似:如何使用文件协议在 Chrome/Webkit 中从一帧调用 JavaScript 函数到另一帧 https://stackoverflow.com/questions/2570718/how-to-call-a-javascript-function-from-one-frame-to-another-in-chrome-webkit-with——不幸的是,这个问题从未得到真正的回答。

我有一个 HTML 页面,其中包含 iframe 中的 SVG 图像。 SVG 导出一个 JavaScript API,允许它执行有用的操作(重置为缩放和居中,以“实际大小”显示)。在 iframe 下方,我放置了按钮,用户可以单击该按钮来调用 SVG 中定义的函数。

我的代码如下所示:

function reset() {
  document.getElementByID('iframe').contentWindow.reset();
}

它在 Safari、Firefox 甚至 IE 9(支持 SVG - 万岁!)中完美运行。但在 Chrome 上,它失败了:调试器告诉我:

Property 'reset' of object [object DOMWindow] is not a function.

事实上,这似乎确实是事实:尽管“contentWindow”是 DOMWindow 类型,但它没有方法或字段(至少调试器不会向我显示)。即使询问其“文档”字段也会失败(返回 null)。

问题似乎是使用 file:// 协议来传输包含的 HTML 和包含的 SVG。正如我在上面提到的问题中所指出的,当尝试访问“contentWindow”时,Chrome 会产生以下错误:

Attempt to access frame with URL file://[...]/contained.svg from frame with URL file://[...]/container.html. Domains, protocols and ports must match.

总的来说,我认为安全性很好;这看起来像是一个出于安全考虑的限制。但在这里,它似乎走得太远了:毕竟,这些是用户文件系统上的文件,就我而言,甚至位于同一目录中。

托管代码不是一种选择 - 它必须驻留在用户的计算机上。我不想告诉人们“只是不要使用 Chrome - 它有愚蠢的安全概念。”

有没有办法解决这个限制?


当然没办法:)这些文件协议是要由用户显式调用的。正如您所看到的,Web 应用程序绝对不可能允许这样做。

唯一的方法是,如果您“作为用户”允许这种情况发生,如果是这样,您可以通过添加以下命令行参数来启用它:

// By default, file:// URIs cannot read other file:// URIs. This is an
// override for developers who need the old behavior for testing.
--allow-file-access-from-files

因此,使用以下命令打开 Chrome:chrome.exe--allow-file-access-from-files这是用于开发的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用文件协议调用 Chrome 中 iframe 中定义的 JavaScript 函数 的相关文章

随机推荐

  • 为什么我必须匹配参数名称才能从 MVC4 Web 应用程序中的 ajax 调用获取 json 数据?

    我只是想知道为什么 NET需要将参数名称与JSON对象的键名称相匹配 此处快速代码预览 var json service COMMON method MENU SUBLIST UID 1000007 ULID stackoverflow U
  • 未知文件类型:basic archive.of(boost 和 emscripten)

    我正在尝试在浏览器内反序列化文件 使用 boost serialization 我用 emscripten 编译 boost 显然没有问题 当编译 实际上是链接 我的程序时 我收到错误 wasm ld error unknown file
  • 如何缩放 iframe 的内容?

    如何在我的网站页面中缩放 iframe 的内容 在我的示例中 它是 HTML 页面 而不是弹出窗口 例如 我想以原始大小的 80 显示 iframe 中出现的内容 基普的解决方案 https stackoverflow com questi
  • .htaccess 维护多个IP

    我在 htaccess 文件中使用以下代码将我的网站置于维护状态 本质上 它的作用是将非特定 IP 地址的任何人重定向到 maintenance 我有一个维护页面的子域 因此允许我在真实站点上执行测试 我的问题是 如何向该行添加第二个 IP
  • C# 只读二维数组

    在 C 中是否有返回只读二维数组的既定方法 I know ReadOnlyCollection是用于一维数组的正确选择 并且我很高兴编写我自己的包装类来实现this get 但如果这个轮子已经存在 我不想重新发明轮子 不幸的是 没有任何内置
  • Python 日志记录仅从脚本记录

    我正在我的一个简单脚本中使用 Python 日志记录模块 目前进行了以下设置 logging basicConfig format asctime s message s level logging INFO datefmt Y m d H
  • 如何打开机器人电子日志记录

    我需要一种非常简单的方法来让 Robolectric 3 0 打开日志记录 我想看到 robolectric 的输出 而不仅仅是我的测试 我在网上尝试的一切都不起作用 我把这个贴在哪里 robolectric logging enabled
  • 我如何自定义所有 UITextField 的 borderWidth 外观?

    我正在尝试自定义 borderWith 的所有 UITextField 外观 尝试这样的事情 只有前两行有影响 其余线路无法正常工作 UITextField appearance setBackgroundColor UIColor gre
  • 是否可以在

    这个问题在这里已经有答案了 我怎样才能添加 div or a span 标签内的 span div
  • Node-sass 未与 Node / Express 一起编译

    我试图让 node sass 与express一起工作 但我根本无法让它进行任何编译 这是我的 app js 文件 var express require express sass require node sass routes requ
  • 策略模式或函数指针[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 在 C 中 当我有可以在运行时接受不同行为的算法时 我宁愿使用函数指针 例如 用于绘制图表的程序有一种绘制线条的算法 该算法可以接受任何函数
  • 同步jquery $.ajax而不锁定IE?

    花了一些时间尝试实现这一点 并找到了一个我认为在 Firefox 中效果很好的解决方案 但是在 IE 中测试时发现使用 async false 会导致浏览器被锁定 停止响应并似乎已冻结 通话时长 要求基本如下 我提供了一系列用户可以检查的复
  • UITableView reloadData EXC_BAD_ACESS 代码=2

    我有用于加载 UITableView 的代码 int numberOfSectionsInTableView UITableView tableView if tableView self peopleTableView return se
  • printf 不在 eclipse 的控制台上打印?

    include
  • Spark sql row_number 还是序列号?

    随机数生成器 SparkSQL 例如 Netezza 序列号 mysql 序列号 Thanks Spark sql 中的序列在 Spark 1 6 中 其 select monotonically increasing id from ta
  • “看过这个的人也看过”算法

    我正在尝试编写一种算法 其作用有点像亚马逊的 购买此产品的人也购买了 两者之间的区别在于 我的只是计算您在单个会话中观看的 产品 而亚马逊则计算每次购买 结账 我在实施和弄清楚算法应该是什么方面遇到了一些困难 到目前为止 我正在通过 Ses
  • 在 Cassandra 中选择列为空的行

    我在 Cassandra 中有下表 CQL 规范 3 3 0 Users
  • MIPS 中的影子寄存器是什么以及它们如何使用?

    当我了解 MIPS 架构时 我遇到了影子寄存器 据说它们是通用寄存器的副本 我无法理解以下内容 何时使用影子寄存器 MIPS 影子寄存器用于减少处理中断时的寄存器加载 存储开销 分配了影子寄存器组的中断不需要保存任何现有上下文来提供空闲寄存
  • 在 Java 桌面应用程序中保存数据的最佳方法是什么?

    我的桌面应用程序中有一个很大的 Java 对象树 我正在尝试确定将它们作为文件保存到文件系统的最佳方法 我的一些想法是 使用 DataOutputStream 滚动我自己的序列化器 这将使我能够最大程度地控制文件中的内容 但代价是对其进行微
  • 使用文件协议调用 Chrome 中 iframe 中定义的 JavaScript 函数

    这个问题与此处提出的问题的完全更新版本非常相似 如何使用文件协议在 Chrome Webkit 中从一帧调用 JavaScript 函数到另一帧 https stackoverflow com questions 2570718 how t