【问题标题】:How to make a JavaScript code run before another如何使 JavaScript 代码在另一个之前运行
【发布时间】:2023-03-05 18:08:01
【问题描述】:

由于 AdSense 脚本,我的脚本出现问题...当 AdSense 脚本无法加载时,我的脚本运行良好,但如果 AdSense 加载,我的脚本无法加载。而且我知道我的脚本在 AdSense 脚本之后运行。

所以我在想,如果我的脚本在 AdSense 脚本运行之前运行(因为是一个将 pre 标记更改为表格的脚本,因此它只会更改布局),所有内容都会加载,而不仅仅是加载 AdSense ...

我的 javascript 是:

window.onload = function(){
var preElements = document.getElementsByTagName('pre');
var codeLine = new Array();
var newContent

for(var i = 0; i < preElements.length; ++ i)
{
    var element = preElements[i];
    newContent='<div align="center"><table width="75%" border="1" cellpadding="0" cellspacing="0" >'

    codeLine = element.innerHTML.split('\n');

    for(var j=0 ; j < codeLine.length ; j++){
        newContent = newContent + '<tr><td width="30" class="codeNumber" >' + j.toString() + ' </td><td class="codeTab"> ' + codeLine[j] + '</td></tr>';
    }

    newContent = newContent + '</table></div>';
    element.innerHTML = newContent;


}

}

它加载在 Head 部分,AdSense 加载在一个单元格内,我只有一个广告空间。 我无法为单元格提供 ID,因为 AdSense 不是单元格上唯一的东西……还有一件事……调用 AdSense 的地方与我有 pre 标签的地方完全不同

已解决:首先我真的对此知之甚少,经过一番研究后,我发现了问题所在。 1º AdSense 存在连接问题,因此在它之后运行的所有脚本都无法加载 2º如果你有“window.onload”,你有脚本并不重要......我认为该功能在窗口加载时起作用,但实际上,它会在窗口完全加载后起作用,这就是为什么它正在与 AdSense 产生冲突。

你们帮我更快地看到了这些东西!

【问题讨论】:

  • 您的脚本在加载 AdSense 后无法运行是什么问题?解决这个问题不是更好吗?尝试解释什么不起作用。
  • 脚本将 pre 标签的内容更改为表格格式(类似于编译器的环境)。使用 AdSense,它不会改变任何东西,没有,它工作正常
  • JavaScript 浏览器控制台有错误吗?您是否有一个实时页面,我们可以在其中查看哪些不起作用?
  • 感谢马塞尔·科佩尔!我不知道 chrome 可以像调试器一样使用……当我运行 Element Inspector 时,我发现 AdSense 存在连接错误,因此,在它之后的所有 sripts 都不会加载。经过一番研究,我发现了另一件事,“window.onload”使功能在页面完全加载后加载。我通过将脚本标签放在内容的末尾并且没有“window.onload”部分解决了这个问题,它运行顺利!谢谢大家对我的耐心
  • 很好。现在请回答您自己的问题并接受它,这样这个问题就结束了。

标签: javascript html adsense


【解决方案1】:

通常大多数人将广告和分析代码包含在结束 &lt;/body&gt; 标记之前。

您应该尽量避免代码出现竞争条件,从加载到执行,它应该是事件驱动和模块化的。如果 Adsense 需要进入由另一个脚本设置的容器中,那么让另一个脚本在完成更新 DOM 时加载 Adsense 是有意义的,作为回调。像这样的:

function loadAdsense(elementId) {

    var js = document.createElement('script');
    js.src = 'http://pagead2.googlesyndication.com/pagead/show_ads.js';

    window.google_ad_client = 'ca-pub-xxxxxxxxxxxx';
    window.google_ad_slot   = '1234567890';
    window.google_ad_width  = 336;
    window.google_ad_height = 280;

    document.getElementById(elementId).appendChild(script);
}

function preToTable() {
    // set PRE to TABLE - id = myNewTable
    // then load Adsense
    loadAdsense('myNewTable');
}

【讨论】:

  • 这有点模糊。您是在谈论 OP 的 Javascript 还是 adsense?
  • 我不能在关闭正文标签之前放置脚本,因为它会将广告放置在错误的位置...
  • 我的脚本工作正常,但广告不显示...我不能将我的 pre 与 ID 放在一起,因为它在某些页面中可以有 1 个 pre 标签,而在其他页面中有 5 个或更多...
  • 您可以循环访问并为每个标签设置 Adsense。这是一个很好的起点。你没有给我们足够的代码来处理,所以我们必须做出广泛的假设。不断回来说“这行不通,因为我还没有告诉你其他事情”是没有帮助的 :)
  • 就像我说的,我是 javascript 新手,我之所以使用它只是因为它对布局有很大帮助...我真的不知道该给什么而且我不知道我发布的内容是否有用......对此感到抱歉:s
【解决方案2】:

您应该将 javascript 放在 head 标记中,并将 AdSense 代码放在内容的末尾。另一种解决方案是在您的第一个脚本完成后使用 javascript 事件来打印 AdSense 脚本。

【讨论】:

  • 我无法将 adsense 放在内容的末尾,因为广告将出现在所有页面之后...
  • 然后创建一个 placeholder divspan 并在脚本完成后,使用 javascript 将 adsense 代码注入其中(innerHtml 属性)。这将动态加载脚本。
【解决方案3】:

已解决:首先我真的对此知之甚少,经过一番研究后,我发现了问题所在。 1º AdSense 存在连接问题,因此在它之后运行的所有脚本都不会加载 2º 如果您在其中有“window.onload”,那么脚本的位置并不重要......我想该功能在窗口加载时起作用,但实际上,它会在窗口完全加载后起作用,这就是它与 AdSense 产生冲突的原因。

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 1970-01-01
    • 2011-10-20
    • 2021-04-15
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    相关资源
    最近更新 更多