我已经阅读了很多主题并尝试了很多东西,但我无法得到我想要的东西。 我刚刚在页面末尾移动了我的js代码,现在我遇到了一些错误。
这就是我的页面的样子:
<html>
<head>
bla bla
</head>
<body>
bla bla
<div class="advertising">
<script type="text/javascript" defer="defer">
window.onload = adsense();
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
<script language="javascript" type="text/javascript" src="fonctions.js"></script>
</body>
</html>
在fonctions.js中,我有我的谷歌adsense代码:
function adsense(){
<!--
google_ad_client = "pub-xxxxx";
/* 120x600, date de création 11/06/11 */
google_ad_slot = "xxxxx";
google_ad_width = 120;
google_ad_height = 600;
//-->
}
我的想法是只在一个地方使用相同的adsense代码,但我无法在文件fonctions.js之后加载它
我试过defer =“defer”,window.onload ......
有什么想法吗? 感谢
我在Firebug中收到此错误: 错误:未定义adsense
PS:我想避免使用Jquery(以避免使页面太大)
更新:
<script type="text/javascript" defer="defer">
(function() { // 'sandbox' javascript pattern to prevent clobbering
// global namespace
var executeProxy = function() {
if (typeof adsense === 'function') { // adsense is configured
adsense();
} else { // adsense is not configured;
// therefore, try again later
setTimeout(executeProxy, 50);
}
};
executeProxy();
}());
</script>
<script language="javascript" type="text/javascript" src="fonctions.js"></script>
在fonctions.js中,如果我输入以下代码,则显示“ok”:
function adsense(){
alert ("ok");
}
但是,如果我有此代码,则不会显示广告:
function adsense(){
google_ad_client = "pub-xx";
/* 120x600, date de création 16/04/11 */
google_ad_slot = "xxx";
google_ad_width = 120;
google_ad_height = 600;
}
我的猜测是这是一个谷歌问题......代码无法以这种方式加载......? 如果我将adsense代码放在页面中(在调用下方 - 你在哪里做 alert('here'); )它会很好地显示...所以我的adsense代码是正确的
更新: 我终于改变了解决方案,我已将代码放在.html文件中,并使用php包含它。所以它不再在我的js文件中了。 无论如何,谢谢你的帮助。
答案 0 :(得分:3)
window.onload
期望函数回调;但是,您正在使用adsense
执行adsense()
,并且adsense
不会返回函数;因此,window.onload
会弃掉它。改为:
window.onload = adsense;
更新
上面的答案应该被抛弃,但是我将其遗弃,以便人们可以知道window.onload
期望函数回调:)
请记住,脚本元素上的defer
将指示浏览器等到页面加载后执行脚本;但是,您的fonctions.js
位于上一个src
标记的script
属性中;因此,您的延迟脚本很可能在定义adsense
之前执行,因为浏览器将发出http请求以检索您的脚本。这将允许延迟脚本在未定义adsense
时继续执行。尝试使用此代替原始延迟脚本:
<script type="text/javascript" defer="defer">
(function() { // 'sandbox' javascript pattern to prevent clobbering
// global namespace
var executeProxy = function() {
if (typeof adsense === 'function') { // adsense is configured
adsense();
} else { // adsense is not configured;
// therefore, try again later
setTimeout(executeProxy, 50);
}
};
executeProxy();
}());
</script>
更新
我忘了在IE以外的任何地方都不支持脚本延迟。因此,推迟问题不应该在这里发挥作用;但是,我在FF和Chrome中测试了以下代码,它可以工作:
<script type="text/javascript" defer="defer">
(function() { // 'sandbox' javascript pattern to prevent clobbering
// global namespace
var executeProxy = function() {
if (typeof adsense === 'function') { // adsense is configured
adsense();
} else { // adsense is not configured;
// therefore, try again later
setTimeout(executeProxy, 50);
}
};
executeProxy();
}());
</script>
<script type="text/javascript">
function adsense() {
alert('here');
}
</script>
答案 1 :(得分:1)
window.onload = adsense();
立即调用adsense()
并将其返回值分配给onload
。