在所有window.onload脚本完成后运行JavaScript?

c9x0cxw0  于 2023-01-01  发布在  Java
关注(0)|答案(7)|浏览(163)

I have an asp.net page that loads some JavaScript scripts. One of those scripts loads some controls into the page appending them to the body in the window.onload event.
我需要通过代码隐藏注入一个脚本来调用依赖于在window.onload中创建的控件的脚本方法。这不起作用,因为我每次调用它总是太早,而且控件当时还没有创建。如果我在超链接中通过onclick调用它,它会起作用,因为控件已经在onload中创建了。
因此,

  1. <script type="text/javascript" src="/Scripts/somefile.js"></script>
  2. addEvent(window, "load", blabla);-上面的js准备了一些在onload事件中附加到主体的控件
    1.在后面的代码中,我尝试通过this.Page.ClientScript.RegisterStartupScriptthis.Page.ClientScript.RegisterClientScriptBlock或任何调用上述. js方法的方式向页面编写脚本,这取决于onload事件中加载的控件。
    关于window.onload事件后如何拨打电话,您有什么建议吗?
ogsagwnx

ogsagwnx1#

创建一个函数数组:

<script>
  var onLoadFunctions = [];

  function addOnLoad(funcName) {
    onLoadFunctions[onLoadFunctions.length] = funcName;
  }

  function executeOnLoad() {
    for (var i=0; i<onLoadFunctions.length; i++) onLoadFunctions[i]();
  }

  addOnLoad(foobar);
  addOnLoad(blabla);
  addOnLoad(theother);

  window.onload = executeOnLoad;
</script>
zpf6vheq

zpf6vheq2#

您可以像注册启动脚本一样注册js文件:

this.Page.ClientScript.RegisterClientScriptInclude("scriptKey", "/Scripts/somefile.js");
q5lcpyga

q5lcpyga3#

您可以使用document.onreadystatechange事件来代替window.onload,如下所示。

document.onreadystatechange=onReady;
  function onReady() {
      if (document.readyState=="complete") {
         alert('The document ready state is "complete"') 
      }
tyky79it

tyky79it4#

如果你能使用jQuery
那么可以在DOM加载完成后调用脚本。

$(document).ready()

Introducing $(document).ready()

yeotifhr

yeotifhr5#

使用Prototype JavaScript,您可以在DOM就绪时调用脚本(see the API here):

document.observe("dom:loaded", function() {
  alert('The DOM is ready.');
});

我建议将onload事件中加载的脚本移到dom:loaded事件中。

9rnv2umw

9rnv2umw6#

onLoad中使用timeout可计划稍后运行脚本。

function mustRunLast () {
    // your "must run after everything else" code here
}

document.addEventListener('load', function(){
    // adjust the delay as you like, 500 millis is a bit long
    setTimeout(mustRunLast, 500)
})

上面的例子迫使你猜测其他的onLoad脚本需要多长时间才能完成。为了安全起见,你必须使用一个长的延迟,但这可能是不可取的。但是如果你有一些状态,你可以检查以验证你所依赖的其他脚本是否已经运行,你可以使用一个短的延迟,让脚本不断重试,直到一切就绪:

让您的脚本检查是否准备就绪,如果没有,则安排稍后重试

const mustRunLast = function() {
    // check some state to see if the other scripts
    // did their thing. If not, schedule self to retry later
    if (<not ready yet>) {
        setTimeout(mustRunLast, 50)
        return
    }
     
    // your "must run after everything else" code here
}

document.addEventListener('load', mustRunLast)
wbgh16ku

wbgh16ku7#

我尝试了几种方法都没有成功。我只是更改了业务需求,脚本由用户操作触发,而不是通过代码背后注入的脚本。
但是对于寻找答案的人来说,有几个可能的候选人可能会在你的情况下解决问题。

相关问题