尝试将信息发布到其他页面时,权限被拒绝了吗?

时间:2014-02-26 08:44:43

标签: javascript forms post

我正在使用以下内容来发布信息,当我创建表单元素时,我得到一个例外:“权限被拒绝”。

var newWindow = window.open('', '_blank', 'alwaysRaised=yes,toolbars=no, menubar=no, location=no, scrollbars=yes, resizable=yes, status=yes,left=10000, top=10000, width=10, height=10, visible=none', '');

var tempFormElement = newWindow.document.createElement('form');
tempFormElement.method = 'post';
tempFormElement.action = urlToOpen;

var tempInputElement;
tempInputElement = newWindow.document.createElement('input');
tempInputElement.setAttribute('TPLInfo', JSON.stringify(linkageInfo));
tempFormElement.appendChild(tempInputElement);
tempFormElement.submit();

newWindow.document.body.removeChild(tempFormElement);
newWindow.close();

请建议。

1 个答案:

答案 0 :(得分:1)

  1. 由于安全限制,现在大多数浏览器都不允许您在视口外创建新窗口或小于100x100
  2. 您不需要打开新窗口 - 而是使用AJAX
  3. 如果由于urlToOpen在另一个域上而无法使用AJAX,则无论如何都无法关闭窗口或删除tempform元素。
  4. 你不能在相同的血统上做到这一点,因为它在提交后不再存在
  5. 没有名为TPLInfo
  6. 的输入元素的有效属性

    所以我建议 - 如果可以的话:

    使用jQuery的Ajax

    $.post(urlToOpen,{"TPLInfo":JSON.stringify(linkageInfo)});
    

    或者如果不在同一个域上(普通JS):

    Live Demo

    var newWindow;
    var urlToOpen = "....";
    function perform() {
          if (!newWindow) { 
            alert("Sorry, you must allow popups");
            return;
          }
          var tempFormElement = newWindow.document.createElement('form');
          tempFormElement.method = 'post';
          tempFormElement.action = urlToOpen;
          var tempInputElement;
          tempInputElement = newWindow.document.createElement('input');
          tempInputElement.setAttribute("name","TPLInfo");
          tempInputElement.value = JSON.stringify({"a":"1"});
          tempFormElement.appendChild(tempInputElement);
          newWindow.document.body.appendChild(tempFormElement);
          tempFormElement.submit();
    }
    window.onload=function() {
        document.getElementById("but").onclick=function() {
    //   var parms = "alwaysRaised=yes,toolbars=no,menubar=no,location=no,scrollbars=yes,resizable=yes,status=yes,left=10000,top=10000,width=10,height=10,visible=none";
          // valid parms, yes I know you want to hide and close but nope.
          var parms = "scrollbars,resizable,status,left=10000,top=10000,width=100,height=100";
    
          newWindow = window.open('', '_blank',parms);
          setTimeout(perform,500);  // give IE time to get over opening
      }
    }