为啥我的网络应用程序无法在打开时重新加载

Posted

技术标签:

【中文标题】为啥我的网络应用程序无法在打开时重新加载【英文标题】:Why is my web app failing to reload on open为什么我的网络应用程序无法在打开时重新加载 【发布时间】:2017-11-01 11:58:04 【问题描述】:

我有一个简单的网络应用程序,我想使用 javascript 对其进行更新。它实际上是从网站加载数据,但在这个演示中,您会看到它无法写入“Hello World”。虽然它可能不是“最佳实践”代码,但它重现了我在使用更复杂代码时遇到的问题。

如果我在 ios 11 上的 Safari 中打开它,页面会显示“Hello World”。我可以刷新并做任何我想做的事。但是,如果我将页面添加到主屏幕(应用程序图标)并清理 Safari 缓存,则会发生以下情况:

我打开网络应用程序,一切正常。但是如果我关闭它,转到邮件并返回网络应用程序,它只会显示一个白屏 - 直到我从 Safari 中清除缓存...

此外,如果我反复关闭和​​打开网络应用程序,它最终会崩溃。

任何想法可能是什么问题?

test.html

<!DOCTYPE html>
<html>
    <head></head>
    <body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>
        $.getScript("test.js", function()update(););</script>
    </body>
    </head>
</html>

test.js

function update() 
    document.write("<html>");
    document.write("<head>");
    document.write('<title>test</title><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, viewport-fit=cover"><meta name="apple-mobile-web-app-capable" content="yes">');
    document.write("</head>");
    document.write("<body>");
    document.write("Hello World");
    document.write("</body>");
    document.write("</html>");

【问题讨论】:

它会向开发控制台写入一些错误吗? 我在系统日志中得到的是“断言失败:... libxpc.dylib”。但是没有其他我可以追踪到代码的东西。但至少我在 iPhone 模拟器上有相同的行为。 为什么需要 jQuery?您实际上所做的只是通过普通的老式香草 JS 写入文档... 这是因为我想重现 Web 应用程序的一般问题。该代码并不是真正有用,但这应该可以工作。 【参考方案1】:

试试这个:

test.html

<!DOCTYPE html>
<html>
    <head>
      <title>
      </title>
    </head>
    <body></body>
</html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="test.js"></script>
<script>
   update();
</script>

test.js

function update() 
    $(document).prop('title', 'test');  // or document.title = 'test';
    $('head')append('<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, viewport-fit=cover">');
    $('head')append('<meta name="apple-mobile-web-app-capable" content="yes">');
    $('body').html('Hello World');

【讨论】:

问题是我想找出我的网络应用程序失败的原因。因此,即使我的代码不是最好的,它仍然应该可以工作。顺便提一句。 .append() 也能正常工作,但应用程序也会失败。 看起来该应用程序确实有效。但是,因为我对其他一些代码也有这个问题,所以我需要找出为什么会发生这种情况。例如,如果我向 body 添加大量 append() ,它也会失败。 在你的页面中,已经有 和 了。您正在尝试再次添加它们的脚本。我认为错误与它有关。 我同意,但为什么它可以在 Safari 上运行,但不能作为 Web 应用程序运行?即使使用 .append()(在网站上 30 次)也会出现此错误。这就是为什么我认为它不相关。但这可能是缓存本身出现问题。如果每次打开网络应用程序时我都可以重新加载它,我就可以解决这个问题...... 如果在不使用缓存的情况下重新加载页面:location.reload(true);

以上是关于为啥我的网络应用程序无法在打开时重新加载的主要内容,如果未能解决你的问题,请参考以下文章

知道为啥我发布的 Android 应用在打开时会立即关闭吗?

应用程序在打开时崩溃

iOS UIImagePickerController 在打开时冻结

为啥即使我的数据库已连接,我的 Heroku 应用程序在其他设备中打开时也没有加载任何数据?

在Android工作室中没有错误,应用程序仍然在打开时崩溃

材质对话框在打开时将主体滚动到顶部