我正在用 phonegap 构建一个 jQuery 移动应用程序。Unsafe JavaScript attempt to access frame
当我尝试访问 iframe 中的页面时存在问题(可能是 webkit)。框架页面和父页面都在本地,以.开头file:///
。我知道像这样的问题在哪里不安全的 JavaScript 尝试访问 Google Chrome 中的框架但我不能passing the --allow-file-access-from-files switch at startup
在我的手机上。而且我也不想部署我在互联网上的应用程序。还有其他选择可以解决这个问题吗?最好不用对浏览器做任何修改。谢谢。
1 回答
我不确定 Webkit 是否遵循相同的规则,但有一个先例。
https://developer.mozilla.org/en/Same-origin_policy_for_file%3a_URIs
在 Gecko 1.8 或更早版本中,任何两个 file: URI 都被认为是同源的。换句话说,本地磁盘上的任何 HTML 文件都可以读取本地磁盘上的任何其他文件。
从 Gecko 1.9 开始,文件只能读取某些其他文件。具体来说,一个文件只有在源文件的父目录是目标文件的祖先目录时才能读取另一个文件。但是,不能以这种方式加载目录。
例如,如果您有一个文件 foo.html 访问另一个文件 bar.html,则只有当 bar.html 与 foo.html 位于同一目录中或与 foo 位于同一目录中的目录中时,加载才会成功.html。
此策略会影响执行同源检查的任何内容,包括 XMLHttpRequest、XSLT 和 XBL。
对于跨窗口 DOM 访问,每个文件都被视为一个单独的源,但有一个例外:如果一个文件是从另一个文件加载的,而该文件本来可以按照同源策略加载它,则它们被认为具有相同的起源。这种加载可以通过子帧、链接、位置集、对 window.open() 的调用等发生。
例如,如果文件 /home/user/foo.html 是一个框架集并且其中一个框架是 /home/user/subdir/bar.html,则认为框架和框架集共享相同的来源。另一方面,如果文件 /home/user/subdir/foo.html 是框架集并且框架是 /home/user/bar.html,则认为框架和框架集具有不同的来源。
新的 security.fileuri.strict_origin_policy 首选项默认为 true,如果用户不想对文件:URI 严格执行相同的源策略,则可以将其设置为 false。