有关window.open的奇怪的Opera问题

时间:2012-05-30 07:59:04

标签: javascript opera

我正在设计一个新的书签,我正在Opera上测试它。

这是我的代码:

javascript:(function(){var a=window.open('http://www.google.com','Ok','left='+((window.screenLeft||window.screenX)+10)+',top='+((window.screenY||window.screenTop)+0)+',height=200px,width=400px,resizable=1,alwaysRaised=1,location=1,links=0,scrollbars=0,toolbar=0');window.setTimeout(function(){a.focus()},250)})();

问题是新窗口没有显示在顶部,但距离顶部大约200px(在其他浏览器中,如Internet Explorer,firefox和chrome,它运行良好)。

那么,为什么这个窗口没有出现在Opera的顶部?

1 个答案:

答案 0 :(得分:3)

您的问题来自以下事实:在Opera中, window.screenY window.screenTop 都已定义,并且 screenY 似乎总是等于0,这是JavaScript中的falsy值,所以

window.screenY||window.screenTop

总是在Opera中返回window.screenTop,而实际上你需要第一个值。

正确的检查方式是:

'screenY' in window ? window.screenY : window.screenTop

这是您的完整代码,我还更新了对 screenLeft / screenX 的检查:

javascript:(function(){var a=window.open('http://www.google.com','Ok','left='+(('screenLeft' in window ? window.screenLeft : window.screenX)+10)+',top='+(('screenY' in window ? window.screenY : window.screenTop)+0)+',height=200px,width=400px,resizable=1,alwaysRaised=1,location=1,links=0,scrollbars=0,toolbar=0');window.setTimeout(function(){a.focus()},250)})();
祝你好运。