停止外部JS文件中的函数exectuing?

时间:2017-04-27 17:40:33

标签: javascript

我包含一个外部JS文件,其中包含一些代码,我需要在特定事件发生后运行(在提交联系表单之后)。

外部文件有一个功能,但也调用该功能。如果在页面加载时运行该函数是可以的,这并不是很痛苦,但是我需要在提交表单后运行它的功能。我的表单是通过AJAX提交的,所以我需要在表单提交后运行外部文件的功能。

我该怎么做?

这是一个帮助......的例子。

我的网站'FOOTER:

    <script type="text/javascript">
       var a_variable = 12345;
    </script>
    <script src="//domain.com/external.js" type="text/javascript"></script>
  </body>
</html>

EXTERNAL.JS的内容:

function doThis(){
   alert(window.a_variable);
}
doThis();

但我只想在我想要的时间运行doThis(),而不是在页面加载时运行。

我可以阻止执行doThis();直到我明确告诉它吗?

注意:我已经尝试通过创建脚本标记(在javascript中)并以这种方式加载external.js,但external.js中的函数需要写入我的用户的浏览器,用户的浏览器显示Failed to execute 'write' on 'Document': It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.。之后,我查看了this answer中的解决方案,但它没有解决问题。所以,我正在寻找一种方法来阻止doThis()执行。

1 个答案:

答案 0 :(得分:0)

你能编辑external.js文件吗?如果是这样,你应该删除doThis()行并添加一个监听器来在窗口加载时调用该函数,如下所示:

function doThis(){
   alert(window.a_variable);
}
window.onload = doThis;

如果您无法编辑JavaScript文件,则会有点卡住。您可以尝试重写它并按照上述模式在本地包含它(因为您可以拉取文件我假设您可以访问源并可以轻松下载文件并进行编辑)。我建议采取这种行动。

如果您真的需要从特定来源中提取它并且无法编辑该文件,您可以查看require.js之类的内容。这将允许您从其他JavaScript代码中加载JavaScript文件,因此您可以在包含文档之前等待文档加载。所以你的HTML可能是:

<html>
    <body>
        <script type="text/javascript">
           var a_variable = 12345;
           window.onload = function() {
              require(["//domain.com/external.js"], function() {
                  console.log("loaded!");
              });
           }
        </script>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.3/require.js"></script>
    </body>
</html>