Javascript安全阻止了我?

时间:2011-10-21 15:28:46

标签: javascript post xmlhttprequest

我很确定这是一个安全问题阻止我这样做,但我想知道是否有一个我不知道的解决方法......

我有一个脚本将用户的电子邮件注入我的客户端的联系人数据库,它在IE浏览器中轰炸,但在FF,Chrome中工作(像往常一样)。只是想知道我是否可以将服务器添加到信任或其他东西以使其工作?

<script type="text/javascript">

    window.onload = init;

    //Global XMLHTTP Request object
    var XmlHttp;
    function CreateXmlHttp() {
        //Creating object of XMLHTTP in IE
        try {
            XmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            try {
                XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (ex) {
                XmlHttp = null;
            }
        }
        //Creating object of XMLHTTP in Mozilla and Safari
        if (!XmlHttp && typeof XMLHttpRequest != "undefined") {
            XmlHttp = new XMLHttpRequest();
        }
    }

    function init() {
        var x = document.getElementsByName("btnContinue");
        x[0].onclick = submitForm;
    }

    function submitForm() {
        var x = document.getElementsByName('Email');
        if (x[0].value.length > 0) {
            CreateXmlHttp();
            XmlHttp.open("POST", "https://app.icontact.com/icp/signup.php", false);
            XmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            XmlHttp.send("redirect='http://www.xyz.com/articles.asp?ID=97'&errorredirect='http://www.xyz.com/articles.asp?ID=256'&fields_email=" +
                x[0].value + "&listid=123&specialid:123=YP7I&clientid=123&formid=123&reallistid=1&doubleopt=0&Submit=Submit");
        }
    }

</script>

我很感激任何见解。

谢谢!

3 个答案:

答案 0 :(得分:0)

我的第一个建议是尝试在 ActiveX对象之前创建XMLHttpRequest 。 IE7及以上DO支持AJAX,就像其他浏览器一样。

接下来,您应该使用open()方法中的相对路径。虽然我认为形成你的问题,但是需要能够在任何网站上运行吗?在这种情况下,我建议使用“旧”方法创建表单和iframe。

答案 1 :(得分:0)

这是同源政策问题。可以设置允许访问内容标题,但IE ActiveXObject不会使用它们。 XMLHttpRequests遵循标题,并且可以在支持它们的浏览器上运行。

看到这个问题: AJAX Permission Denied On IE?

虽然看起来他们找不到兼容IE的跨域POST的解决方案......

如果您可以通过Web服务器代理(向服务器发布POST),并让服务器进行POST,那么问题就解决了。

答案 2 :(得分:0)

在新浏览器上,如果您在请求的页面上有特殊的HTTP标头,则可以使用跨域XHR。 http://ejohn.org/blog/cross-site-xmlhttprequest/

或者您可以使用动态脚本加载。