在出现 JS 错误的页面上运行外部 Javascript

Posted

技术标签:

【中文标题】在出现 JS 错误的页面上运行外部 Javascript【英文标题】:Run External Javascript On Page With JS Errors 【发布时间】:2015-05-02 03:53:23 【问题描述】:

我正在编写一个页面聊天软件,我对这些外部 JS 问题还比较陌生。

我的问题是如何在外部页面上加载和运行我们的 JS,并在给定页面上的任何现有 JS 错误之前忽略/运行。

示例:我们的 sn-p 在客户页面的页脚内。他们发布了对其中一个 JS 脚本的更新,他们发现了一些代码,然后它就崩溃了。现在我们的 JS 代码将不会加载。

处理此问题的最佳方法是什么?

【问题讨论】:

重复:Ignore javascript errors in a page and continue executing the script 【参考方案1】:

你不能。如果浏览器早先抛出错误,它将永远不会访问您的代码。 你能做的最好的事情就是在里面加上一个<noscript> 标签来解释出了什么问题。

如果您让客户将您的脚本标签放在头部(在他们的代码之前)并将其标记为异步,它可能仍会运行,但我不会依赖它。

【讨论】:

如果它是一个单独的脚本标签(正如你的最后一段似乎暗示的那样),那么你的第一个陈述是不正确的。放入 <noscript> 元素将无济于事,因为如果不支持脚本,则会显示该元素,而不是脚本错误。 好吧,noscript 这件事对我来说有点脑残。但是,单独的脚本标签并不能保证后面的脚本将在所有情况下运行。特别是,旧版本的 IE 可以而且将会破坏整个页面。【参考方案2】:

为您的脚本使用单独的<script> 元素。 Each script will run independently(尽管他们会在共享环境中这样做)。

如果您依赖他们的脚本成功运行(例如,为您提供 DOM 中的函数或元素),那么您需要进行防御性编程并在使用它们之前测试您所依赖的东西。如何处理这些错误取决于您自己,您可以替换自己的替换项、抛出自己的错误等等。

【讨论】:

基本上目前脚本是像这样动态生成的:<script type="text/javascript">var hover = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cscript src='" + host + "dev.site.com/script.js' type='text/javascript'%3E%3C/script%3E"));</script> 问题似乎是如果他们把它放在他们网站的页脚中,并且在此之前的脚本会引发错误,一些现有的 AJAX请求似乎没有触发。

以上是关于在出现 JS 错误的页面上运行外部 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

c#WPF带有Highchart的Web浏览器,来自外部源的Javascript无法正常工作“此页面上的脚本出现错误”

Next JS 中的页面预渲染发生错误 [重复]

初次使用引用外部js心得

将外部 HTML 加载到页面中,包括 Javascript 并在加载时启动 JS

外部JS可以在iOS WkWebView中的加载页面(完成时)上执行吗

Next.js 500 内部服务器错误在 404 页面内调用 useEffect Hook 后立即出现