使用javascript进行URL验证/连接

时间:2011-09-30 10:16:04

标签: javascript ajax cross-domain

我想使用javascript验证外部网址是否有效/存在/响应。例如,“www.google.com”应返回true,“www.google123.com”应返回false。

我想通过测试来使用AJAX:if(xmlhttp.readyState == 4&& xmlhttp.status == 200)但似乎这对远程服务器(外部URL)不起作用。由于我的服务器使用代理,我计划使用浏览器端脚本,以便它自动使用用户的浏览器代理(如果存在)。 请告诉我,我必须使用“AJAX Cross Domain”吗?如何实现这一点,因为我只是想验证一个网址。 除了使用AJAX之外的任何其他方式?

2 个答案:

答案 0 :(得分:0)

我很确定这是不可能的。任何允许您在用户上下文中调用另一个域上的随机页面的AJAX都会打开所有类型或安全漏洞。

您必须使用服务器端解决方案。

答案 1 :(得分:0)

避免跨域问题的常用方法是注入标记。像图片或脚本的标签可以从任何域加载其内容。你可以注入一个类型为“text / x-unknown”的脚本标签,然后听标签load-event。当load事件触发时,您可以再次从页面中删除脚本标记。

当然,如果您要查找的文件恰好是图片,那么您可以new Image()。这样您就不必通过注入标记来污染页面,因为图像在创建时会加载(这可以用于预加载图像)。再次,只需等待图像上的加载事件。

<强>更新

好吧,我似乎在这里得出结论。浏览器之间在如何支持它方面存在一些差异。以下是一个完整的示例,介绍如何使用脚本标记验证IE9中的URL以及最新版本的Firefox,Chrome和Safari。

它在旧版本的IE(至少IE8)中不起作用,因为它们显然不会为脚本标记提供加载/错误事件。

如果script-tag的contenttype不为空或设置为'text / javascript',则Firefox拒绝加载任何内容。这意味着使用此方法检查脚本文件可能有点危险。在我的测试中执行任何代码之前,似乎删除了脚本标记,但我不确定......

无论如何,这是代码:

<!doctype html>
<html>
<head>
    <script>
        function checkResource(url, callback) {
            var tag = document.createElement('script');
            tag.src = url;
            //tag.type = 'application/x-unknown';
            tag.async = true;
            tag.onload = function (e) {
                document.getElementsByTagName('head')[0].removeChild(tag);
                callback(url, true);
            }
            tag.onerror = function (e) {
                document.getElementsByTagName('head')[0].removeChild(tag);
                callback(url, false);
            }
            document.getElementsByTagName('head')[0].appendChild(tag);
        }
    </script>
</head>
<body>
    <h1>Testing something</h1>
    <p>Here is some text. Something. Something else.</p>
    <script>
        checkResource("http://google.com", function (url, state) { alert(url + ' - ' + state) });
        checkResource("http://www.google.com/this-does-not-exists", function (url, state) { alert(url + ' - ' + state) });
        checkResource("www.asdaweltiukljlkjlkjlkjlwew.com/does-not-exists", function (url, state) { alert(url + ' - ' + state) });
    </script>
</body>
</html>