Fro*_*dik 3 javascript ondemand google-custom-search
我正在使用Google自定义搜索引擎及其新的自动完成功能.我希望在页面本身加载后加载整个javascript.原始的Google代码是这样的:
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load('search', '1');
google.setOnLoadCallback(function() {
google.search.CustomSearchControl.attachAutoCompletion(
'some-long-unique-id',
document.getElementById('q'),
'cse-search-box');
});
</script>
<script type="text/javascript" src="http://www.google.com/cse/brand?form=cse-search-box&lang=cs"></script>
Run Code Online (Sandbox Code Playgroud)
我已经使用关于JS动态加载的教程将此代码转换为此代码:
(function() {
var goog = document.createElement('script'); goog.type = 'text/javascript';
goog.src = 'http://www.google.com/jsapi';
var cse = document.createElement('script'); cse.type = 'text/javascript';
cse.src = 'http://www.google.com/cse/brand?form=cse-search-box&lang=cs';
goog.onload = function() {
google.load('search', '1');
google.setOnLoadCallback(function() {
google.search.CustomSearchControl.attachAutoCompletion(
'some-long-unique-id',
document.getElementById('q'),
'cse-search-box');
});
};
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(cse, s);
s.parentNode.insertBefore(goog, s);
})();
Run Code Online (Sandbox Code Playgroud)
好吧,即使我认为我的解决方案应该可行(谷歌改变他们的分析按需异步代码的方式相同),但事实并非如此.页面加载正常,一旦CSE加载,页面就会变为空白.什么东西清除DOM,我想它是某种"谷歌的东西"?有人能否解决这个问题,可能还有一个有效的解决方案?
谢谢
Fro*_*dik 11
好的,所以通过检查谷歌加载器开发人员指南和大量的尝试和测试,我已经想到了如何更改我的代码,以便它在我的问题中按预期工作:
(function() {
var goog = document.createElement('script'); goog.type = 'text/javascript';
goog.src = 'http://www.google.com/jsapi';
goog.onload = function() {
google.load('search', '1', {"callback": function() {}});
google.setOnLoadCallback(function() {
google.search.CustomSearchControl.attachAutoCompletion(
'some-long-unique-id',
document.getElementById('q'),
'cse-search-box');
});
};
var cse = document.createElement('script'); cse.type = 'text/javascript';
cse.src = 'http://www.google.com/cse/brand?form=cse-search-box&lang=cs';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(cse, s);
s.parentNode.insertBefore(goog, s);
})()
Run Code Online (Sandbox Code Playgroud)
主要是这一行:
google.load('search', '1', {"callback": function() {}});
Run Code Online (Sandbox Code Playgroud)
如果你没有指定回调(至少是空函数),那么当谷歌的CSE加载时,整个页面都会变成空白.我不知道为什么,但现在使用这个虚拟回调函数工作正常.
希望它可以帮助有同样问题的人.
| 归档时间: |
|
| 查看次数: |
8823 次 |
| 最近记录: |