0x80004005(NS_ERROR_FAILURE)[nsIDOMHTMLFormElement.submit]

php*_*der 3 javascript dom

我创建了一个方法来检索一些数据(lat,lon points)并打开一个窗口来映射它们.

function openMapWindow (data) {
    alert(data);

    var mapForm = document.createElement("form");
    mapForm.target = "Map";
    mapForm.method = "POST"; // or "post" if appropriate
    mapForm.action = "/map.php";

    var mapInput = document.createElement("input");
    mapInput.type = "text";
    mapInput.name = "addrs";
    mapInput.value = data;
    mapForm.appendChild(mapInput);

    document.body.appendChild(mapForm);

    window.open("", "Map", "status=0,title=0,height=600,width=800");

    mapForm.submit();

}
Run Code Online (Sandbox Code Playgroud)

数据变量填充以下内容:

地图coorindates

然而,我得到以下区域:

mapInput.value = data;
Run Code Online (Sandbox Code Playgroud)

错误:未捕获异常:[例外..."组件返回失败代码:0x80004005(NS_ERROR_FAILURE)[nsIDOMHTMLFormElement.submit]"nsresult:"0x80004005(NS_ERROR_FAILURE)"位置:"JS框架:: http://www.xxx.xxx :: openMapWindow :: line 244"data:no]

第0行

Jar*_*ish 6

它与浏览器的弹出窗口拦截器有关.如果仔细查看错误,它会将提交"按钮"描述为问题,而不是mapValue.input行.

以下代码对我有用:

http://jsfiddle.net/WDFNL/

function openMapWindow (data) {
    alert(data);

    var mapForm = document.createElement("form");
    mapForm.target = "Map";
    mapForm.method = "POST"; // or "post" if appropriate
    mapForm.action = "/map.php";

    var mapInput = document.createElement("input");
    mapInput.type = "text";
    mapInput.name = "addrs";
    mapInput.value = data;
    mapForm.appendChild(mapInput);

    document.body.appendChild(mapForm);

    window.open("", "Map", "status=0,title=0,height=600,width=800");

    mapForm.submit();
}
openMapWindow('-35.308401,149.124298-35.307841,149.124298');
Run Code Online (Sandbox Code Playgroud)

我确实得到了你刚才描述的错误,但它与我的弹出窗口拦截器有关.一旦我授权jsfiddle.net被允许弹出窗口,它就开始工作了.

编辑

有一种简单的方法可以测试这个并提醒用户他们的弹出窗口阻止程序是否禁用了地图:

http://jsfiddle.net/WDFNL/1/

function openMapWindow (data) {
    var mapForm = document.createElement("form");
    mapForm.target = "Map";
    mapForm.method = "POST"; // or "post" if appropriate
    mapForm.action = "/map.php";

    var mapInput = document.createElement("input");
    mapInput.type = "text";
    mapInput.name = "addrs";
    mapInput.value = data;
    mapForm.appendChild(mapInput);

    document.body.appendChild(mapForm);

    map = window.open("", "Map", "status=0,title=0,height=600,width=800");

    if (map) {
        mapForm.submit();
    } else {
        alert('You must allow popups for this map to work.');
    }
}
openMapWindow('-35.308401,149.124298-35.307841,149.124298');
Run Code Online (Sandbox Code Playgroud)

注意map变量.您可以测试它以查看是否window.open返回窗口句柄,并根据结果采取相应的操作.