代码之家  ›  专栏  ›  技术社区  ›  Beska

使用document.write异步运行外部JS函数

  •  1
  • Beska  · 技术社区  · 6 年前

    我们有一个网站,应该是加载一个由第三方提供的徽标(徽标是一个链接,允许用户看到我们的网站已经被第三方验证。)

    <script type="text/javascript"> 
        //<![CDATA[ 
        var tlJsHost = ((window.location.protocol == "https:") ? 
            "https://secure.comodo.com/" : "http://www.trustlogo.com/");
        document.write(unescape("%3Cscript src='" + tlJsHost + 
            "trustlogo/javascript/trustlogo.js' 
            type='text/javascript'%3E%3C/script%3E"));
        //]]>
    </script>
    

    还有另一个剧本:

    <script language="JavaScript" type="text/javascript">
        TrustLogo("https://ourfakesite.com/logo.png", "CL1", "none");
    </script>
    

    这个问题发生在远程站点变得非常慢的时候…我们加载这个徽标的所有页面也突然变得非常慢,因为脚本是同步运行的。

    理想情况下,我希望它能像设计为ajax类型调用一样工作……加载页面,加载页面后,尝试加载额外的内容。

    我尝试了一些Acyc/Dever的组合,使用了像Ajax这样的东西,但是似乎因为JS使用了文档。如果页面被完全加载,Dojt.Wrrad在写入新的数据之前吹走现有的文档;页面加载…然后消失,徽标出现。(我看到一些评论解释说,在加载页面后使用document.write时,这是预期的行为。)

    有办法吗?有没有我不考虑的另一条路?

    2 回复  |  直到 6 年前
        1
  •  2
  •   T.J. Crowder    6 年前

    看着 https://secure.comodo.com/trustlogo/javascript/trustlogo.js ,和 TrustLogo 函数本身使用 document.write (间接地,代码被缩小了,但最终还是缩小了),这意味着您不能异步使用这些脚本。如果使第一个脚本异步并以另一种方式附加该JavaScript文件,则必须使第二个脚本异步,这意味着 文档.write (在 TrustLogo公司 函数)将在主HTML解析完成后调用,这反过来意味着 document.open ,这将删除您的页面。:-(

    当然…你可以把这些都放在 iframe 在你的主页上,只有 ,而不是整个页面受到影响。如果这不违反徽标的使用条款(显然,您将使用 框架