0

我的源代码:

<!doctype html>
<html>
<head>
    <title>onload test</title>
    <link type="text/css" rel="stylesheet" href="spot.css" media="screen" />

</head>
<body>
  <h1>Welcome Page</h1>

  <script>

      debugger;
      function constructScripts(url, callBack) {
          var script = document.createElement("script");
          script.type = "text/javascript";
          script.src = url;
          document.getElementsByTagName("head")[0].appendChild(script);
          if (script.readyState) {
              script.onreadystatechange = function () {
                  if (script.readyState == "loaded" || script.readyState == "complete") {
                      script.onreadystatechange = null; callBack();
                  }
              };
          }
          else {
              script.onload = callBack;
          }
      }


  </script>
  <script>
      debugger;
      myCallBack = function () {
          alert(this.src + "loaded");
      }

      constructScripts("files1", myCallBack);
      constructScripts("files2", myCallBack);
      constructScripts("files3", myCallBack);

  </script>

</body>
</html>

this.src 在这里未定义。我想这应该是一个“脚本”对象,它应该具有它的 src 属性,以便我可以读取文件名。这里的“这个”是谁?而且当我查看页面源代码时,这些脚本不包含在 header() 部分中。为什么会这样?谢谢。

4

3 回答 3

1

当您调用callBack函数时,请将脚本对象传递给它,例如callBack(script). 修改callBack函数如

myCallBack = function (script) {
      alert(script.src + "loaded");
  }

查看源代码不显示动态加载的元素。

于 2012-05-04T09:32:18.683 回答
1

this.src 在这里未定义。

它不应该是……它在前面定义过:script.src = url

我想这应该是一个“脚本”对象,它应该具有它的 src 属性,以便我可以读取文件名。这里的“这个”是谁?

onload触发orreadystatechange事件的脚本元素

而且当我查看页面源代码时,这些脚本不包含在 header() 部分中。为什么会这样?

因为您正在查看页面源代码,而不是实时 DOM 在被 JavaScript 操作后的序列化。

于 2012-05-04T09:31:06.280 回答
0

您需要使用原型扩展您的功能。

Element.prototype.MyMethod = function(){}

查看您编辑的代码

<!doctype html>
<html>
<head>
    <title>onload test</title>
    <link type="text/css" rel="stylesheet" href="spot.css" media="screen" />

</head>
<body>
  <h1>Welcome Page</h1>

  <script>
        Element.prototype.MyMethod = function(){}
      function constructScripts(url, callBack) {
          var script = document.createElement("script");
          script.type = "text/javascript";
          script.src = url;
          script.MyMethod = callBack;
          document.getElementsByTagName("head")[0].appendChild(script);
          if (script.readyState) {
              script.onreadystatechange = function () {
                  if (script.readyState == "loaded" || script.readyState == "complete") {
                      script.onreadystatechange = null; 
              script.MyMethod();
                  }
              };
          }
          else {
              script.onload = callBack;
          }
      }


  </script>
  <script>
      myCallBack = function () {
          alert(this.src + "loaded");
      }

      constructScripts("files1", myCallBack);
      constructScripts("files2", myCallBack);
      constructScripts("files3", myCallBack);
  </script>

</body>
</html>
于 2012-05-04T10:07:29.337 回答