我正在使用Google Closure,而我正在尝试制作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;
}
};
Google Closure与Google Chrome打包应用程序不兼容吗? Closure对大型Javascript项目有很多好处,很难放弃这样一个有价值的工具。
编辑:我知道如果除Closure库之外还使用了Closure Compiler,那么就没有goog.require,但这显然使得开发和调试变得更加困难。答案 0 :(得分:1)
只要您运行它未编译或不使用高级编译进行编译,您必须使用document.createElement(“script”)重新编写doc.write;
所以用以下代码替换te doc.write行:
var script = document.createElement('script');
script.src = src;
script.type = 'text/javascript';
goog.global.document.getElementsByTagName("head")[0].appendChild(script);
return true;
高级编译代码不应该需要它,因为它将所有使用过的代码放在一个文件中。