【问题标题】:how to load an external js file after a page loads and use a function from it如何在页面加载后加载外部 js 文件并使用其中的函数
【发布时间】:2017-07-13 17:05:50
【问题描述】:

页面加载后,我需要将外部 js 文件加载到 html 文件中。这是因为在这个外部 js 文件中,变量仅在 html 文件加载后才更新。 话虽如此,我之后还需要使用函数 showScreen 。 showScreen 是外部 js 文件中的布尔值。

我只希望它在 showscreen 为 true 时切换屏幕,并且只能在 html 文件加载后加载。所以现在如果我在 html 中做了 window.onload = showScreen,它总是未定义的

external.js(这是外部文件的一部分,也是我尝试使用的函数)

function showScreen(showTraditionalScreen) {
   console.log("showTraditionalScreen "+ showTraditionalScreen);
   return showTraditionalScreen;
}

更新:

index.html(这是我要进行更改的文件的下半部分)

<script src="js/main.js"></script>
        <script src="js/additions.js"></script>
        <script src="../server/webcam.js" defer></script>
        <script>
           if(window.onload =showScreen)
              window.location.href = "traditional.html";
           }
       </script>
    </body>
 </html>

它目前没有做任何事情,但关键是,当 showScreen 为 true 时,页面将更改为 traditional.html。目前它没有这样做

这个文件也是异步的,所以console.log继续打印真假

我知道 ajax 是一个不错的选择,我一直在尝试,但我还是有点迷茫。

页面加载后如何在 html 文件中使用 external.js 函数? 为什么我的文件目前不允许我使用 showscreen?

【问题讨论】:

  • 你试过window.onload$(document).ready如果使用jquery吗?
  • 我不能使用这些,因为页面需要先加载
  • 这就是使用它们的意义所在。他们告诉其中的 javascript 等到页面加载后才执行。
  • 我应该更清楚,但是,我只希望它在 showscreen 为真时切换屏幕,并且只能在 html 文件加载后加载。所以它不适用于我的目的,因为 window.onload = showScreen 总是未定义
  • 认为我明白你在说什么。您尝试window.onload = showScreen 的方式,方法定义已经运行,我认为它返回未定义,因为它已经检查了有问题的元素,但在页面加载之前它不存在。我建议将函数定义本身包装在 window.onload 中,这样您就不会在知道它在屏幕上之前查找该元素。

标签: javascript html


【解决方案1】:

你可以使用defer

<script src="path" defer></script>

此布尔属性设置为向浏览器指示脚本将在文档被解析之后但在触发 DOMContentLoaded 之前执行。 defer 属性仅适用于外部脚本(仅应在存在 src 属性时使用)。

【讨论】:

  • 如果您描述了 defer 的作用以及他们如何使用它来解决他们的问题,这将是一个更完整的答案。
  • 什么布尔属性?
  • defer 是布尔属性。如果将它添加到脚本标签,它将延迟加载该脚本,直到文档被解析之后,但如果你不添加它,脚本会在浏览器到达它时立即加载。
  • 我认为这行不通,我使用了 defer 并打印了一个警报,它甚至在页面加载之前就弹出了
【解决方案2】:

将函数调用包装在 window.onload 中

看起来if(window.onload = showScreen) 可能正在检查对 onload 变量的赋值是否发生,而不是检查showScreen 的返回是否为真。这是你的意图吗?我认为这将在页面完成加载之前返回 true(如果它成功),因此如果这是您想要的,它作为一种检查页面是否已加载的方法没有用处。

您的showScreen 函数带有一个参数。当您按照您所做的方式将这样的函数分配给onload 时,您将传入一个默认的“事件”参数。如果这就是你想要的,也许这就是你的意思“这是因为在这个外部 js 文件中,一个变量只在 html 文件加载后才更新。”?

我还认为您在 if 语句的第一行末尾缺少一个左括号,这可能会导致问题。

这是提供您想要的东西的另一个尝试。在下面的代码中,我正在等待页面加载,一旦加载,我将检查 showScreen 函数是否返回 true。假设您需要页面加载事件作为参数,我已将其传递给您的 showScreen 函数。否则我不确定showTraditionalScreen 参数来自哪里。

<script>
  window.onload( function(event){
    if(showScreen(event)) {
      window.location.href = "traditional.html";
    }
  });
</script>

【讨论】:

  • 我在外部文件中设置了 showTraditionalScreen 输出,所以这不起作用,因为 showScreen 始终未定义
猜你喜欢
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 2017-04-26
  • 2014-06-14
  • 2020-03-05
  • 1970-01-01
相关资源
最近更新 更多