我正在尝试通过Ajax在我的网站中包含一个JS文件,使用Rawgit从我的一个GitHub存储库中获取它。出于某种原因,当我使用开发或生产URL时它不起作用,但是当我直接从Github使用我的文件的原始版本时,问题就会停止。当我使用CSS文件的开发URL时,我没有遇到任何问题。有谁知道为什么会这样?
这是我的代码:
$.get("https://rawgit.com/Larpee/The-Khan-Quiz/master/game.js", function (game) {
var sketchProc = function (processingInstance) {
with (processingInstance) {
size(400, 400);
frameRate(30);
eval(game);
}
};
var canvas = document.getElementById("game");
var processingInstance = new Processing(canvas, sketchProc);
});
更新:我认为问题出现是因为GitHub(不是Rawgit)将文件作为.txt
文件提供,而RawGit将它们作为.js
提供。
我仍然希望收到一个解释,说明为什么我的.js
扩展程序的JavaScript文件无效,但
答案 0 :(得分:2)
对于RawGit,按预期得到content-type: application/javascript;charset=utf-8
,GitHub给出Content-Type: text/plain; charset=utf-8
。这似乎是唯一的区别。
我检查了你的例子,发现在使用RawGit(并获得脚本响应)时,success
回调根本不会执行,但是使用GitHub会增加console.log('foo');
例如。我还发现在你的脚本上运行eval()
会引发异常:
Uncaught ReferenceError: createFont is not defined
我自己用一个语法正确的占位符JS文件做了回购,在这种情况下,RawGit和GitHub上success
的{{1}}回调确实执行了,后来添加了对未定义名称的引用,导致对RawGit URL的调用无法执行其回调。
上课?当您获得带有$.get()
的脚本时,它实际上会立即执行,如果$.get()
失败,那么一切都会以静默方式结束。 jQuery getScript load vs execution支持这一点,这也暗示了这种(在我看来)处理脚本数据的疯狂方式在2.1.0版本中结束。
这让我建议,除了修复脚本之外,您应该使用eval()
(不确定是否必须确保结果标头具有$.getScript()
),或者显式插入脚本元素使用JS并进行application/javascript
回调:
onload
此外,您使用的(function(d, script) {
script = d.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.onload = function(){
// remote script has loaded
};
script.src = '[RawGit URL]';
d.getElementsByTagName('head')[0].appendChild(script);
}(document));
块应该变为:
with
Processing.js文档中有很多基本上都是Java的示例,需要很少的修改才能正确处理JS作用域。悲哀!