【问题标题】:lock browser while loading external scripts加载外部脚本时锁定浏览器
【发布时间】:2014-12-23 16:16:12
【问题描述】:

我正在使用 jquery $.getScript(url, callback) 加载外部 javascript,我想要实现的是锁定浏览器直到加载脚本,我尝试使用 $.ajax 而不是 async: false 但没有更好的结果

【问题讨论】:

标签: javascript jquery ajax getscript


【解决方案1】:

尝试使用$.holdReady()

$.holdReady(true);

var data;

function callback(response) {
   if (response) {
   data = response;
   $.holdReady(false)
   };
};

var request = $.getScript(url);

$(document).ready(function() {
  $("body").append(data.result)
});

$.holdReady(true);

var data;

function callback(response) {
   if (response) {
   data = response;
   $.holdReady(false)
   };
};

var request = $.getScript("https://gist.githubusercontent.com/guest271314/e2edd364cc20ad7e9e14/raw/f7d7b756005ad6d2b88cf0211f78a2990d7d2dc7/content.json");

$(document).ready(function() {
  $("body").append(data.result)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

【讨论】:

    【解决方案2】:

    看看http://requirejs.org/。我发现它对于应用程序脚本依赖项非常有用和实用。

    听起来您需要在其他事情发生之前加载/运行脚本。这正是 requireJS 可以用来做的事情!

    【讨论】:

      【解决方案3】:

      还有另一种方法可以实现这一点:

      function get_external_script(url){
          var settings = {
              async : false,
          };
          $.ajax(url,settings);
      }
      

      您可以使用此函数加载外部 JavaScript,这也会执行它。

      【讨论】:

        【解决方案4】:

        $.getScript 创建一个<script> 标记并将其附加到<head>,因此不能同步。相反,您必须使用 $.ajax,然后评估返回的 javascript。

        $.ajax({
            url: 'somescript.js',
            async: false,
            dataType: 'text',
            success: function (script) {
                eval(script);
            }
        });
        

        也就是说,这可能是解决您要解决的任何问题的完全错误的方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-07
          • 2013-04-30
          • 1970-01-01
          • 2011-07-15
          相关资源
          最近更新 更多