Google chrome extension 在打包应用程序中使用dojo 1.8(未打包卸载在打包应用程序中不可用)

Google chrome extension 在打包应用程序中使用dojo 1.8(未打包卸载在打包应用程序中不可用),google-chrome-extension,Google Chrome Extension,在将dojo与我的打包应用程序结合使用方面取得了一些进展之后,我遇到了另一个我找不到任何文档的障碍 { ... "sandbox": { "pages": ["test.html"] }, "app": { "background": { "scripts": [ "background.js" ] } } } html从应用程序以及我的一些模块中加载dojo,但是当dojo解析页面的dom时,我收到plat

在将dojo与我的打包应用程序结合使用方面取得了一些进展之后,我遇到了另一个我找不到任何文档的障碍

{
  ...
  "sandbox": {
     "pages": ["test.html"]
  },
  "app": {
    "background": {
      "scripts": [
        "background.js"
      ]
    }
  }
}
html从应用程序以及我的一些模块中加载dojo,但是当dojo解析页面的dom时,我收到platformApp抛出的错误

Uncaught unload is not available in packaged apps. platformApp:14
(anonymous function)                               platformApp:14
Window.addEventListener                            platformApp:127
addListener                                        dojo.js.uncompressed.js:15317
on.parse

是否有任何CSP规则可以添加到沙盒中,以使其正常运行?

由于错误消息的状态,已对打包应用禁用load和beforeload方法,这也适用于沙盒iFrame。您可以检查禁用的其他内容


话虽如此,我只是在沙盒iframe中尝试了dojo 1.8,只要我不设置卸载侦听器,简单的方法似乎可以正常工作。

我希望chrome在默认情况下做到这一点,而不是抛出错误。。。但在加载dojo之前,我必须这样做:

// Prevent registrations for unload/beforeunload and warn, chrome will throw exception.
(function() {
  var windowAddEventListener = Window.prototype.addEventListener;
  Window.prototype.addEventListener = function(type) {
    if (type === 'unload' || type === 'beforeunload') {
          try {
        throw new Error('Do not use Window.addEventListener for ' + type);
      } catch (e) {
        console.error(e.message, e);
      }
    } else
      return windowAddEventListener.apply(window, arguments);
  };
})();

你能和我分享一个小的、独立的复制品吗?我想测试一下,看看是否有解决办法。谢谢我会试着把一些东西放在一起,很快把它贴在这里。我刚开始在stackoverflow上发帖,有没有一种公认的方法可以将文件示例附加到一个问题上?这里有一个独立的示例:谢谢你的示例,很抱歉花了这么长时间才回复你。将在下面回答。嗯。。。实际上,除了加载dojo,我没做什么。。可能是解析器和内容窗格。这很奇怪。你能分享你使用的导致问题的代码吗?可能是Dojo改变了它,或者可能是我使用的示例太简单了。很抱歉反应太晚。我觉得这个演示太简单了。。。当您只加载基本dojo文件时,不会发生太多情况(当您加载dojo.js并使用async:true时,amd加载程序加载了…)尝试将dojo小部件放入其中,并让解析器下来解析它。我敢肯定你会看到它设置了onload钩子来提供有用的模块,比如domReady模块。这是生产级应用程序的可行解决方案吗?平台的意图似乎是不允许卸载事件,这规避了这一点。我在使用jquery和signer时遇到了同样的问题。这对我来说是可行的,但我不想依赖它,然后让Chrome团队拧紧螺丝并破坏我的代码。我不明白为什么不这样做。这仍然不允许API的功能性使用,它只是悄悄地(有点)失败,而不是破坏您的应用程序。谷歌让这个API对开发者毫无用处的目标得到了维护,你不应该依赖它(但现在你有时间来修复你的应用程序,而不是死在水里),我们知道错误的来源吗?我使用的是Ember.js,虽然这个问题对功能没有影响,但至少对我来说,这些错误消息让我发疯。@Kincaid Yes。窗口中有一个用于检查addEventListener的处理程序,如果您尝试在onunload上注册侦听器,该处理程序将引发未捕获的异常。谷歌故意这么做是因为他们不希望开发者依赖这种机制。上述解决方案将错误打印到控制台,以避免应用程序停止。如果愿意,您可以省略控制台消息,我只是不喜欢不记录错误。@ddumont我想我的错误与您的有点不同。它源于platformApp:14,但其“包应用程序上不允许使用window.toolbar”,然后转到window.statusbar、window.scrollbars等。不幸的是,我似乎无法追溯platformApp:14以外的错误。