0
我正在使用Google Closure,并试图制作Chrome打包的应用程序。谷歌关闭和Chrome打包的应用程序:兼容性?
我对goog.require
调用会导致错误:
Uncaught document.write() is not available in packaged apps.
罪魁祸首是base.js
goog.writeScriptTag_ = function(src) {
if (goog.inHtmlDocument_()) {
var doc = goog.global.document;
// If the user tries to require a new symbol after document load,
// something has gone terribly wrong. Doing a document.write would
// wipe out the page.
if (doc.readyState == 'complete') {
// Certain test frameworks load base.js multiple times, which tries
// to write deps.js each time. If that happens, just fail silently.
// These frameworks wipe the page between each load of base.js, so this
// is OK.
var isDeps = /\bdeps.js$/.test(src);
if (isDeps) {
return false;
} else {
throw Error('Cannot write "' + src + '" after document load');
}
}
doc.write(
'<script type="text/javascript" src="' + src + '"></' + 'script>');
return true;
} else {
return false;
}
};
是谷歌关闭谷歌浏览器打包应用程序不兼容? 关闭对于大型Javascript项目有很多好处,因此很难放弃这样一个有价值的工具。
编辑:我知道,如果除了Closure库使用Closure编译器,没有goog.require,但这显然使开发和调试更困难。
它保证工作?看起来,当我尝试在另一个项目上动态加载Javascript时,脚本以不确定的顺序异步执行。 –
我证实了这一观察。它可能适用于小文件或其他内容,但是JavaScript是非顺序加载和评估的。 –
这必须是谷歌使用document.write的原因。您可以尝试calcdeps.py并为所需的所有文件创建<脚本标记。您可以使用输出列表来获取列表,然后创建<脚本标记以在使用它们之前加载所有需要的js文件。 goog.require应该检测到文件已经加载并且不会执行document.write。 https://developers.google.com/closure/library/docs/calcdeps#opts – HMR