延迟加载knockoutjs与bookmarklet失败

时间:2014-03-11 09:48:58

标签: javascript knockout.js bookmarklet asana

我正在尝试修复我编写的书签,以跟踪单页应用程序中的URL更改,特别是在使用体式时记录时间表。它使用脚本加载器在init之前嵌入jQuery和KnockoutJS库。在KnockoutJS库初始化之后,我无法在全局范围内找到ko对象,并且无法找出原因。要进行测试,请登录https://app.asana.com,打开Goog​​le Chrome开发人员工具的“控制台”标签,然后尝试以下代码:

var koScript=document.createElement('script');
koScript.type='text/javascript';
koScript.src='//ajax.aspnetcdn.com/ajax/knockout/knockout-3.0.0.js';
document.getElementsByTagName('head')[0].appendChild(koScript);

“网络”选项卡显示脚本下载。 “元素”选项卡将脚本显示为head元素的最后一个子元素。然而ko仍未定义。

1 个答案:

答案 0 :(得分:1)

简短版本是:

  1. Asana使用的内部模块系统使用module.exportsrequire - 您可能从node.js知道的CommonJS标准。
  2. knockout.js文件检查环境以确定是应该设置window.ko还是使用module.exports或AMD风格的define。如果它检测到CommonJS样式require,则会在exports而不是全局ko对象上设置属性。
  3. 解决方法:

    你可以先暂时“复制”要求:

    _require = require; require = null
    

    然后它应该按照您的期望设置window.ko