如何:动态加载Google Ajax API到Chrome扩展内容脚本

4
我将尝试在Chrome扩展程序的“内容脚本”中使用谷歌的ajax API。在普通的HTML页面上,我只需执行以下操作:
<script src="http://www.google.com/jsapi"></script>
<script>
  google.load("language", "1");
</script> 

但是,由于我正试图从JS代码动态加载翻译库,因此我尝试了以下方法:

script = document.createElement("script");  
script.src = "http://www.google.com/jsapi";  
script.type = "text/javascript";  
document.getElementsByTagName("head")[0].appendChild(script); 
google.load('language','1')

但是最后一行会抛出以下错误:
Uncaught TypeError: Object #<an Object> has no method 'load'

有趣的是,当我在Chrome的js控制台中输入相同的“google.load('language','1')”时,它按预期工作...
我还尝试过使用jquery的.getScript(),但问题仍然存在...
有人知道可能出现的问题以及如何解决吗?
提前感谢!
2个回答

1

我已经把它这样做了:

<script type="text/javascript">
    var headID = document.getElementsByTagName("head")[0];
    var newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    newScript.src = 'http://www.google.com/jsapi';
    headID.appendChild(newScript);
</script>
<script type="text/javascript">
    google.load("language", "1");
</script>

它没有返回任何错误。


你如何从content-script.js附加此代码块?我已经尝试了来自js文件的相同代码,但它替换了HTML中的所有内容为<head><script src="https://www.google.com/uds/?file=elements&amp;v=1&amp;packages=transliteration" type="text/javascript"></script><link href="https://www.google.com/uds/api/elements/1.0/3eced193c1ab3ba305519598439ccaef/transliteration.css" type="text/css" rel="stylesheet"><script src="https://www.google.com/uds/api/elements/1.0/3eced193c1ab3ba305519598439ccaef/transliteration.I.js" type="text/javascript"></script></head> - user405398

1

内容脚本只能访问自身或其他内容脚本的函数。由于您将 Google API 加载程序添加到文档的脚本中,因此无法从内容脚本中调用它。 :)

如果您需要将 API 加载到文档的脚本中,可以通过指定autoload参数来实现: "https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22language%22%2C%22version%22%3A%221%22%7D%5D%7D"

http://code.google.com/apis/loader/autoloader-wizard.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接