任何人都可以提供帮助,我有一个被阻止的弹出窗口。这是一个弹出窗口,因为有人点击了我网站上的打印图片。
我认为当弹出窗口来自onclick
时,我不应该阻止这些?
有人可以帮忙吗?如果启用弹出窗口阻止程序,则child1
变量始终返回为NULL
也许问题是onclick
事件然后将控制传递给一个新函数,该函数加载一个html文件并执行child.document.write
这是我的简单代码..
var width = 800;
var height = 600;
var left = parseInt((screen.availWidth / 2) - (width / 2));
var top = parseInt((screen.availHeight / 2) - (height / 2));
var windowFeatures = "width=" + width + ",height=" + height
+ ",menubar=yes,toolbar=yes,scrollbars=yes,resizable=yes,left="
+ left + ",top=" + top + "screenX=" + left + ",screenY=" + top;
child1 = window.open("about:blank", "subWind", windowFeatures);
答案 0 :(得分:13)
问题是如果您导航到当前主机中的某个位置,open将仅返回对窗口的引用。您正在导航到about:blank,这不在您的主机中。
尝试将blank.htm文件添加到您的网站并将其打开。我仍然不确定document.write是否会被允许文档不会被打开进行编写,你可以操作现有空白文档的DOM。
答案 1 :(得分:4)
当设置为Medium
过滤级别时,Internet Explorer弹出窗口阻止程序将不会阻止JavaScript打开的窗口(如果它们是由用户操作启动的)。以下在IE 6,7和8中工作正常:
<script type="text/javascript">
function openWin() {
var width = 800;
var height = 600;
var left = Math.floor((screen.availWidth - width) / 2);
var top = Math.floor((screen.availHeight - height) / 2);
var windowFeatures = "width=" + width + ",height=" + height +
",menubar=yes,toolbar=yes,scrollbars=yes,resizable=yes," +
"left=" + left + ",top=" + top +
"screenX=" + left + ",screenY=" + top;
child1 = window.open("about:blank", "subWind", windowFeatures);
writeTo(child1);
}
function writeTo(w) {
w.document.write('Test');
}
</script>
<a href="#" onclick="openWin();return false;">Test</a>
请注意,在新打开的窗口中使用document.write
在某些Web浏览器中不起作用。另请注意,这可能会触发其他浏览器中的弹出窗口阻止程序,即使它的工作原理如Internet Explorer中所示。
我已经看到在某些情况下,从onclick
事件调用JavaScript会导致弹出窗口阻止程序触发。它似乎与 far window.open()
来自onclick事件的方式有关。在调用window.open()
之前调用函数的函数级别太多。如果没有看到您的确切实施,我无法告诉您这是否是您遇到的问题。
答案 2 :(得分:3)
它阻止它,因为它不是具有target =“_ blank”的锚。你是以编程方式创建弹出窗口。
在您提供的代码示例之后执行此操作。
if (!child1) {
alert('You have a popup blocker enabled. Please allow popups for www.yourSite.com');
}
答案 3 :(得分:1)
请尝试代码
var newWin = window.open(...);
if (newWin && newWin.top) {
// popup has opened
} else {
// popup has been blocked
}
答案 4 :(得分:0)
我建议您使用target =“_ blank”而不是window.open()创建一个虚拟[form]。
我希望它有效。
问候。
PD:我认为将您的网站添加到“可信站点”不是一种选择,对吗?
答案 5 :(得分:0)
我有一个想法,即10/11:
let win = window.open();
setTimeout(function(){
win.customParam = 'xxxx';
});
在win中,你可以在窗口加载后使用定时器或循环获得customParam: