我们在我们的网站上放置了一段代码(标签内的某个地方),调用外部.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.
此致
答案 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,并将其替换为有用的内容。