【问题标题】:how to refire scripts from index page? [closed]如何从索引页面重新触发脚本? [关闭]
【发布时间】:2012-04-17 13:37:40
【问题描述】:

我想重新启动在我的 index.php 主页中加载的脚本(syntaxhighlighter、processingjs)。

我还想在 .load() 请求的另一端执行脚本...这似乎不太可能,因为这些页面请求也命中 .text(),据我了解,它会删除脚本。这种事情总是依赖于脚本本身还是我对页面编译不了解的地方?

重申一下,我正在寻找一种方法来重新触发已经加载但不再影响 ajax 加载内容的脚本。

【问题讨论】:

  • 你能解释一下这个问题吗?

标签: javascript jquery getscript


【解决方案1】:

确定触发脚本的唯一方法是重新加载页面。

您对页面编译没有任何误解。当浏览器呈现 html 时,它会遇到 <script> 标签。它们按照遇到它们的顺序执行。

正如您自己所说,可以使用 javascript 来删除脚本块。虽然这对我来说非常不寻常,但我之前只听说过几次(并且调用 jQuery.fn.text() 肯定不会这样做),但仅此一项就不可能可靠地重新执行 everything.

话虽如此,因为我们通常不希望在浏览器完成将所有元素加载到页面之前执行代码,因此仅在响应文档的 onload 事件时运行所有代码是一种常见模式。这就是你的代码在设置$(document).ready(function(){...}) 或$(function(){...}) 时所做的事情(它们都是相同的)。由于该代码始终响应文档的加载事件而运行,您始终可以使用$(document).ready() 或$(document).trigger('ready') 重新触发它

但是,请彻底测试这一点,因为许多库都假设该事件仅发生一次。

【讨论】:

  • 我应该在 .load() 请求的末尾使用 $(document).trigger('ready') 吗?
  • @expiredninja - 每当您想尝试重新运行所有加载脚本时,您就会触发它。我看不到在负载处理程序结束后触发的意义,因为这只会导致刚刚发生的一切再次发生。此外,这会使一切陷入无限循环
【解决方案2】:

大多数库都会附带一个在页面内容上“运行”它们的函数。您只需编写对它们的调用,将它们放入某种“初始化”函数中,并在需要时调用它。

【讨论】:

    【解决方案3】:

    您可以修改加载的脚本,以便可以从函数中调用它们。然后,当您要运行脚本的内容时调用此函数。

    如果您不知道如何修改脚本,请获取一些开发人员工具,例如 FireBug for FireFox,以便您可以在脚本运行时对其进行检查。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      相关资源
      最近更新 更多