【问题标题】:Calling function from external .js file, nothing happens从外部 .js 文件调用函数,没有任何反应
【发布时间】:2017-07-01 02:58:01
【问题描述】:

我有一个非常基本的 JavaScript 项目,我只是在测试和学习这门语言。我想要程序做的就是启动并调用外部 main.js 文件中的一个函数。目前,启动时没有任何反应。

我曾尝试复制网上给出的示例,但它们似乎对我不起作用。

HTML 文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Cex_Program</title>
    <link href="css/default.css" rel="stylesheet" />
</head>
<body>
    <div>Content goes here!</div>
    <script src="js/main.js"></script>
    <script>
        Main();
    </script>
</body>
</html>

JavaScript 文件:

函数的内容无关紧要,我只是想让程序流程进入函数(打我的断点);

// Your code here!

var InfiniteLoop = 1;
var DeltaTime = 0;

function Main()
{
    var Day = new Date();
    var StartTime = Math.round(new Date() / 1000);
    var StartCurrentLoopTime = 0;
    var EndCurrentLoopTime = 0;
}

【问题讨论】:

  • 您需要在窗口加载时使用 eventListener :)
  • @DylanSteele 你是什么意思? Main() 告诉它运行。只是没有输出,或者任何显示函数已经运行的东西。
  • 你需要特殊的文件结构:[![project root][1]][1] [1]:i.stack.imgur.com/DoreL.png
  • 感谢您的回复。
  • 好的,不输入段落,但设置注释...无论如何,我在运行程序之前设置了断点(我在 Visual Studio 中),它永远不会被击中。我还添加了 consol.log(day) 行作为检查,但它仍然不起作用。 (我没有看到任何输出)。

标签: javascript html


【解决方案1】:

这确实有效

<!DOCTYPE html>
<html>
  <body>
    <div>Content goes here!</div>
    <script>function Main( str ) { console.log( str ); }</script>
    <script>
        Main( "Main!" );
    </script>
  </body>
</html>

所以

我们可以由此推断,要么js/main.js 没有被下载,要么Main() 函数外部的&lt;script&gt; 无法访问,要么Main() 根本不起作用或产生可识别的结果。

请参阅this w3schools tutorial about scopes,了解有关为什么Main() 可能无法访问的更多详细信息。

Main() 不起作用的情况下检查浏览器控制台是否有错误。

我很乐意根据需要更新此答案以响应积极反馈。

测试Main()是否可以访问

检查Main() 是否为全局函数,方法是在输入之前确定window.hasOwnProperty( "Main" ) 是否为全局函数。

<!DOCTYPE html>
<html>
  <body>
    <div>Content goes here!</div>
    <script>
        ( function() {
            function Main( str ) { console.log( str ); }
        } () );
        function Alt( str ) { console.log( str ); }
    </script>
    <script>
        if ( window.hasOwnProperty( "Main" ) ) {
            Main( "Main!" );
        } else {
            console.error( "Main() can't be accessed from here" );
            if ( window.hasOwnProperty( "Alt" ) ) {
                Alt( "Alt!" );
            }
        }
    </script>
  </body>
</html>

【讨论】:

  • 我认为Main 确实运行了。只是没有输出,也没有记录等。
  • 我喜欢优秀! ? --- “产生可辨别的结果” - 我赌这个。
  • 好的,不输入段落,但设置注释...无论如何,我在运行程序之前设置了断点(我在 Visual Studio 中),它永远不会被击中。我还添加了 consol.log(day) 行作为检查,但它仍然不起作用。 (我看不到输出)。重复我上面的评论
  • @HDennis - 假设 js/main.js 正在正确下载(路径良好且脚本加载没有错误),js/main.js 正在同步加载,并且 Main() 可访问(是global) 并正常运行;正如我的示例所示,一切应该正常工作。为了简化您的调试,请尝试删除断点,注释掉Main() 的内容并仅用一个简单的console.log() 替换它。如果这没有发生,则可能存在一种或多种其他所述的可能性。
  • “CSP14312:在主机定义的策略中违反了资源指令‘script-src ms-appx:‘unsafe-eval’:内联脚本。资源将被阻止。”在 JavaScript 控制台中被报告为警告,这看起来与您有关吗?我确实尝试了 console.log() 但没有看到任何结果。为什么 main.js 不会被同步加载?这只是 Visual Studio 中的一个默认新项目,因此包含路径和加载都应该是默认的并且我假设可以正常工作?
【解决方案2】:

我在我的开发机器上创建了您的设置并加载了 html 页面。假设文件在您的机器上被正确命名,我可以确认代码确实执行了。

检查 JavaScript 是否在浏览器中正确运行的一个好方法是使用调试器:

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多