避免javascript打开新窗口被浏览器阻止的方法

  经本人亲测,使用使用虚拟表单的方式可以完美解决。该方法的核心奥义是:浏览器不阻止当前窗口中javascript的window.open()动作。
  利用这个规则,在当前窗口中打开一个指定标题的空白窗口,然后将虚拟表单提交到该标题对应的窗口。

  一、wallimn-util.js文件。一个独立的通用js文件,放很多通用的函数
/**
 * JS通过虚拟表单的方式POST方式提交数据
 * @param URL
 * @param PARAMS
 * @returns
 */
function jsPost(URL, PARAMS, TARGET) {
	  var temp = document.createElement("form");
	  temp.action = URL;
	  temp.method = "post";
	  temp.style.display = "none";
	  if(!TARGET){
		  TARGET="_self";
	  }
	  temp.target=TARGET;
	  for (var x in PARAMS) {
	    var opt = document.createElement("textarea");
	    opt.name = x;
	    opt.value = PARAMS[x];
	    temp.appendChild(opt);
	  }
	  document.body.appendChild(temp);
	  temp.submit();
	  return temp;
	}


  二、需要用javascript打开窗口的页面:
//有人说这个函数要通过a的onclick调用才行。我没有测试按钮行不行。
//如果想将window.open不放在当前页面,写在上面wallimn-util.js文件中,浏览器同样会阻止。
function jsOpenWin(){
  var title="js新窗口";
  window.open("about:blank",title);
  jsPost("wallimn.iteye.com",{name:"wallimn"},title);
}


  三、重要提示:
   window.open只能写在当前页面中。
   window.open只能写在当前页面中。
   window.open只能写在当前页面中。

猜你喜欢

转载自wallimn.iteye.com/blog/2373215