使用JavaScript动态加载JavaScript

时间:2011-04-29 09:37:20

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

经过一个多小时试图让它工作我认为这是因为跨域政策,但我真的认为这会有效。我也找不到很多关于它的信息。但是,这是我的问题。我有一个名为http://mysite.com的网站,然后我在http://supercoolsite.com/api/script.js添加了第三方脚本(我正在撰写的内容)和此脚本,此脚本需要动态加载google地图api:http://maps.google.com/maps/api/js?sensor=false之前它运行。好吧,我认为这段代码可行:

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()设置为{{1}我们托管的文件。在我们发言时即将尝试这一点,但是,如果可能的话,使用纯JS来实现它将是非常棒的。

P.S。我也尝试添加jQuery,然后执行googlemaps.php,它仍然没有工作

- 更新 -

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

您会在控制台中看到错误: getScript()

尽管Uncaught TypeError: undefined is not a function变量是全局的。

1 个答案:

答案 0 :(得分:7)

你只是有一个小错误:

fileref.onload = callback();

这会立即致电callback并将其返回值分配给fileref.onload

应该是

fileref.onload = callback;

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

DEMO