您做得对,但您确实需要确保使用onload
(或轮询),因为页面需要一段时间才能加载到新窗口中。
这是一个完整的工作示例:Live Copy | 来源
(function() {
document.getElementById("theButton").onclick = function() {
var novoForm = window.open("http://jsbin.com/ugucot/1", "wFormx", "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,");
novoForm.onload = function() {
var w = novoForm.innerWidth;
var h = novoForm.innerHeight;
novoForm.document.getElementById("monitor").innerHTML = 'Janela: '+w+' x '+h;
};
};
})();
我想知道这是一些安全限制还是我错过了什么......
不在您的示例中,不,因为页面显然是从同一来源加载的。如果 URL 来自不同的来源,那么是的,您会遇到Same Origin Policy,它禁止跨域脚本。您可以通过document.domain
属性放宽它,将包含上述代码的窗口和正在加载的窗口设置document.domain
为相同的值。从上面的链接:
如果两个窗口(或框架)包含将域设置为相同值的脚本,则这两个窗口的同源策略会放宽,并且每个窗口都可以相互交互。例如,从 orders.example.com 和 catalog.example.com 加载的文档中的协作脚本可能会将它们的 document.domain 属性设置为“example.com”,从而使文档看起来具有相同的来源并使每个文档都可以读取对方的属性。
更多关于document.domain
可以在 MDN上找到。请注意,它仅适用于两个文档共享一个公共父域的情况,例如,如果它们都设置为,则它适用于app1.example.com
and ,但不适用于and因为它们没有可以设置的共同值。app2.example.com
example.com
example1.com
example2.com