使用Rawgit获取Javascript文件

时间:2017-03-02 14:55:09

标签: javascript jquery ajax github

我正在尝试通过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文件无效,但

1 个答案:

答案 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作用域。悲哀!