【问题标题】:Dynamically load JavaScript with JavaScript使用 JavaScript 动态加载 JavaScript
【发布时间】:2011-08-15 09:13:21
【问题描述】:

经过一个多小时的尝试,我认为这是因为跨域策略,但我真的认为这会奏效。我也找不到很多关于它的信息。但是,这是我的问题。我有一个名为http://mysite.com 的站点,然后我在http://supercoolsite.com/api/script.js 包含一个第3 方脚本(我在写什么),并且该脚本需要在运行之前动态加载位于http://maps.google.com/maps/api/js?sensor=false 的google maps api。好吧,我认为这段代码可以工作:

function loadScript(filename,callback){
  var fileref=document.createElement('script');
  fileref.setAttribute("type","text/javascript");
  fileref.setAttribute("src", filename);
  fileref.onload = callback();
  if (typeof fileref!="undefined"){
    document.getElementsByTagName("head")[0].appendChild(fileref)
  }
}

loadScript('http://maps.google.com/maps/api/js?sensor=false',function(){
  console.log('done loading');
  init();
});

但我在控制台中的回复是:

api.js:408 done loading
api.js:115 test
api.js:310 Uncaught ReferenceError: google is not defined

test”位于init() 的顶部。所以,它正在加载脚本,但似乎没有执行它。那么,有什么想法吗?如果这是一个跨站点脚本问题,我唯一能想到的解决方法是在我们端有一个 PHP 脚本,它基本上只是将标题设置为 text/javascript 标题,然后将 echo file_get_contents() 设置为 googlemaps.php 文件我们主持人。在我们说话的时候即将尝试这个,但是,如果可能的话,用纯 JS 来做这件事会很棒。

附:我也试过加jQuery,然后做getScript(),还是不行

-- 更新--

看这个小提琴: http://jsfiddle.net/ycMCa/2/

您会在控制台中看到错误: Uncaught TypeError: undefined is not a function

尽管google 变量是全局变量。

【问题讨论】:

    标签: javascript security api google-maps-api-3 xss


    【解决方案1】:

    你只是有一个小错误:

    fileref.onload = callback();
    

    这将立即调用callback并将其返回值分配给fileref.onload

    应该是

    fileref.onload = callback;
    

    您还应该在设置源之前添加处理程序(以防万一)。

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-01
      • 2018-10-11
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 2011-11-09
      • 2013-10-25
      相关资源
      最近更新 更多