javascript - 在XMLHttpRequest onreadystatechange anon中的window.open。功能

时间:2011-03-16 21:26:49

标签: javascript

这是我正在尝试做的事情:

httpReq.onreadystatechange = function() {
    if (httpReq.readyState == 4) {
        if (httpReq.status == 200) {
            var response = httpReq.responseText;
            if (response == "-2") document.shortener_form.urlField.value = "";
            else {
                document.shortener_form.urlField.value = response;
                window.open("http://example.com", '_blank');
            }
        } else {
            document.shortener_form.urlField.value = "Error!";
        }
    }
};

第8行的window.open函数未执行。它可以在其他任何地方使用,而不是在匿名功能中。我在Javascript上很糟糕,我搜索了谷歌,所以没有找到答案。感谢。

编辑:顺便说一句,该功能可以在页面和脚本的其他地方使用,所以我已经将问题隔离在这个匿名函数中。

3 个答案:

答案 0 :(得分:1)

这可能是浏览器设置。如今大多数浏览器都默认阻止不是由用户启动的事件触发的弹出窗口(即调用window.open)。这会导致弹出窗口在内部工作单击或键盘处理程序,但不在像准备状态处理程序那样的异步触发函数中。

检查window.open是否适用于其他异步代码:

<script>
    window.setTimeout(function() {
        window.open("http://example.com", '_blank');
    }, 1000);
</script>

如果您的浏览器失败(就像我的浏览器一样),您可能会遇到弹出窗口阻止程序。

答案 1 :(得分:0)

此行正在执行或抛出错误:
document.shortener_form.field.value = response;

我注意到它与上面和下面的线不同:
document.shortener_form.**urlField**.value = "";(注意*的)是故意的吗?

答案 2 :(得分:0)

这是一个弹出窗口拦截器问题。您的浏览器不希望允许window.open(),除非它是用户操作的直接结果(例如鼠标点击)。