外部JavaScript停止页面加载

时间:2014-03-26 16:39:54

标签: javascript

我们在我们的网站上放置了一段代码(标签内的某个地方),调用外部.cgi文件

<script language="JavaScript" type="text/javascript" src="http://www.externaldomain.com/cgi-bin/file.cgi?foo=bar"></script>

此脚本记录一些数据,然后输出以下代码

document.write('<a href="http://www.link.com/" target="_blank"><img src="http://www.externaldomain.com/image/banner.jpg" height=60 width=468 alt="foobar"/></a>');

这反过来显示图像。

我们遇到的问题是file.cgi位于外部服务器上,无法移动到我们的服务器上。如果该服务器有停机时间,我们发现它会停止其余的页面加载。有没有办法解决这个问题?

编辑 - 阅读评论后的更多信息

当我们遇到这个问题时,.cgi文件所在的服务器会在超时之前挂起。

我也尝试在javascript调用中添加async,但在dubugging控制台中收到以下警告

A call to document.write() from an asynchronously-loaded external script was ignored.

此致

1 个答案:

答案 0 :(得分:0)

当外部服务器出现停机时,他们的主机可能会发送一个包含200个不正确响应代码的停机通知。

也许脚本会像这样返回:

<script type="text/javascript">
    <html>
    <head>
    <title>Downtime!</title>
    </head>
    <body>
    <p>sorry, cheap-ass hosting is experiencing some downtime. Cheerio!</p>
    </body>
    </html>
</script>

当然,这是一个语法错误,会导致某些浏览器爆炸。


看看外部服务可能会挂起几分钟,您应该像这样异步加载该脚本:

<script async language="JavaScript" type="text/javascript" src="http://www.externaldomain.com/cgi-bin/file.cgi?foo=bar"></script>

async属性告诉浏览器继续加载下一个脚本而不等待这个脚本先完成。

请参阅a broswer compatibility chart了解异步。


要尝试的最后一件事是为该服务编写自己的代理。在node.js中很容易:http://www.catonmat.net/http-proxy-in-nodejs/

您可以对其进行修改,以便向external_domain.com发送请求,剥离document.write,并将其替换为有用的内容。