【问题标题】:Difference between two styles of JavaScript Embed Codes?两种样式的 JavaScript 嵌入代码之间的区别?
【发布时间】:2017-08-10 09:59:06
【问题描述】:

这是我的第一个问题,我希望我做得对。目前还没有找到任何解决方案,问了几个我的编码朋友,还没有足够的答案。就是这样:

我正在优化我的辅助项目 SaaS,这取决于用户将 JavaScript 嵌入代码复制/粘贴到他们的网站中。就像谷歌分析或 Twitter 要求你做的那样。

在研究其他人的做法时,我总是看到以下两种方法之一,我真的很想知道它们之间有什么区别。

编辑澄清:两个加载的脚本都位于外部服务器上。

方法一:这样的“标准嵌入脚本”:

<blockquote id="container">Hello!</blockquote>
<script src="//some.saas.tld/widget.js"></script>

这是 Twitter 使用的,它似乎只是加载脚本,然后修改 &lt;blockquote&gt; 元素

方法 2: 像这样“破解嵌入脚本”:

<script> 
  var a = document.createElement('script'); 
  a.src = '//some.saas.tld/widget.js'; 
  parentNode.insertBefore(a); 
</script>

(这只是显示我的意思是哪种嵌入非常基本 - 它不起作用,并且块引用不在其中,因为这不是重点)。 例如,谷歌分析就是这样做的。

问题是:为什么有些服务使用第一种方法,而有些使用第二种方法?对我来说,它似乎创造了相同的结果。什么是赞成/反对?

我之所以这么问,是因为一旦嵌入代码在他们的网站代码中运行,就很难让用户更改嵌入代码。所以从一开始就做好是很重要的。

谢谢!

【问题讨论】:

    标签: javascript embedding


    【解决方案1】:

    第一次加载调用基本上是同步调用。如果未完成,这将不允许下一个脚本加载或执行。

    但是,第二次手动脚本加载是异步的。即使脚本没有完全加载,它也允许执行和加载其他脚本。

    有一篇很好的文章详细解释了这种行为 - 查看链接 - https://trevweb.me.uk/javascripthtml-synchronous-and-asynchronous-loading/

    【讨论】:

    • 我不认为这是一个正确的答案,对不起。在这两种情况下,加载类型都可以这样添加:方法 1:&lt;script src="script.js" async&gt; 方法 2:a.async = true;
    • @Teesche Ashwin 是对的。 IE不 支持 async 属性。 MDN 声明:'在不支持异步属性的旧浏览器中,插入解析器的脚本会阻塞解析器;插入脚本的脚本在 IE 和 WebKit 中异步执行,但在 Opera 和 4.0 之前的 Firefox 中同步执行。'
    猜你喜欢
    • 2015-04-22
    • 2018-06-12
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多