在Chrome App Sandbox中加载脚本文件

时间:2014-10-05 14:10:43

标签: javascript google-chrome iframe google-chrome-app

我正在使用Chrome应用,我有一个脚本文件保存在应用程序的沙盒文件系统中。 (可通过网址filesystem:chrome-extension_****/Persistent/script.js

获取

我可以使用Chrome的FileSystemAPI在主应用程序窗口中读取文件。但是,我需要它在沙盒页面中可访问和执行。

我的清单中有以下内容 -

"sandbox": {
      "pages": ["sandboxed_page.html"],
      "content_security_policy": "sandbox allow-scripts;"
},

我正在使用这样的页面:

<iframe id="sandbox_frame" seamless="seamless" src="sandboxed_page.html" sandbox="allow-scripts"></iframe>

我尝试在主应用窗口中加载文件,使用window.URL.createObjectURL()将其转换为blob:URL,并通过postMessage()将此网址传递到沙箱。在沙盒中,我正在尝试将URL加载到<script>元素中。我收到错误Not allowed to load local resource: blob:chrome-extension%3A//...

另一个选项(正在运行)是在主应用程序中加载script.js的内容,并通过postMessage()发送整个字符串。不确定这是个好主意,因为script.js会变得非常大。

我做错了什么,或者是否在Chrome的安全政策禁止的沙箱中加载本地脚本?

我浏览了https://developer.chrome.com/apps/app_external,但没有提到将外部资源发送到沙箱。

1 个答案:

答案 0 :(得分:-1)

沙盒页面以独特的原点执行,即与App本身不同的源,并且您无法访问不同来源的文件系统URL。对于从这些文件创建的对象URL也是如此。

你基本上坚持使用postMessage方法,尽管你可以通过将其作为ArrayBuffer传输而不是将数据复制为字符串来提高效率。请参阅https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers#Passing_data_by_transferring_ownership_(transferable_objects)