Javascript 如何调整 Firefox 弹出窗口大小?

8

我正在学习Javascript和jQuery,但我是一个试图迈出下一步的HTML开发者。

我试图将内容放入一个表格中,这个表格可以是任何大小(它是用于新闻网站的)。我检查大小,然后相应地调整弹出窗口的大小;虽然窗口不完全正确,但它起作用了,但在Firefox中甚至没有调整大小。

使用通用链接来打开一个基本窗口:

<a onclick="window.open('http://site.local/popup/','popup','width=1,height=1')">popup</a> 

我将它指向一个默认页面,该页面将所有内容放入表格中(id="top")。它有一个默认的width="1"来强制约束,然后让内容扩展表格以设置实际大小。然后在document.ready()中检查表格大小并调整窗口大小:

<script type="text/javascript">
 <!--
 $(document).ready(function() {
  var divh = document.getElementById('top').offsetHeight;
  var divw = document.getElementById('top').offsetWidth;

  //Test size
  //alert("Table: width= " + divw + "px / height= " + divh +"px");

  //Resize
  window.resizeTo(divw,divh);
  }    
 -->
</script>

我需要能够调整已在Firefox中打开的窗口大小。

所有窗口大小(除了Firefox)都有问题,但我可以添加填充 - 稍微大一点比截断好。不幸的是,Firefox生成一个微小的180w x 249h窗口并且从未调整大小。

我在这里进行了无果的搜索 - 大多数建议编辑Firefox中的设置,这显然是不能指望用户做到的。

有什么想法吗?


1
你不能保证任何浏览器都能让你控制所创建窗口的大小。你甚至不能确定你是否会得到一个窗口 - 用户可以指示他们的浏览器将所有新窗口作为浏览器选项卡打开。 - Pointy
同意 - 抱歉,我表述不够清晰。我需要Firefox在不要求用户调整其内部about:config设置的情况下,以Javascript请求的几乎相同的尺寸打开。 - Holland
你说得很清楚,Pointy 也是对的:如果用户关闭了“窗口调整大小”选项,则无法更改窗口大小。 - RoToRa
没错 - 我也这么想。谢谢 Pointy 和 RoToRa。 - Holland
4个回答

1
我强烈建议您用div弹出框替换您的弹出框。您将会遇到像Firefox这样的问题,以及浏览器完全阻止它。假设您已经包含了jqueryui并且从同一域加载此内容:
$('#container').load('/popup',function() {
     var table = $('#container #top');
    $('#container').dialog({height:table.height(), width: table.width()});
});

0

尝试类似这样的东西;

<a class='poptrigger'>pop</a>

$(function(){
 var w = $("#top").outerWidth();
 var h = $("#top").outerHeight();
 $('.poptrigger').click(function{
  window.open('http://site.local/popup/','popup','width='+w+',height='+h)
 })
});

这样你就不需要调整窗口大小,只需最初设置大小即可。


如果我知道初始大小,那就可以行得通。这是为了报纸而设计的 - 问题在于内部元素可以是任何大小,并且可以附加任何横幅广告大小。在元素之前和之后,图像可以伴随文本出现,而此弹出窗口上的广告空间可以像320x240平方广告一样拥有摩天大楼...我只能查询已经打开的窗口中的div/table以确定其尺寸...真的很烦人。 - Holland

0

Firefox带有一个偏好设置,允许/禁止使用Javascript调整窗口大小。 它在工具-选项-内容-启用Javascript -> [高级]中。

我不确定是否默认禁用调整大小,但您可能需要先检查自己的Firefox安装。

如果默认禁用,则很遗憾在打开窗口后没有任何操作可以调整窗口大小。 一个丑陋的解决方法是再次使用window.open()打开自身并指定首选大小。


是的 - 这正是我担心的。我将不得不查看是否可以预取任何图像大小,然后设置横幅尺寸的约束条件,以便我可以做出更明智的猜测。谢谢大家。 - Holland
1
顺便提一下,cnn.com/live使用了我提到的丑陋解决方法。由于某种原因,如果window.name不匹配,他们坚持要打开另一个弹出窗口。 - timdream

0
为什么不使用ajax请求获取内容并在当前内容上方的div中显示它呢?

谢谢 - 这现在正在组织内部考虑中。似乎在技术发挥魔力之前,“政策”可能需要改变。 - Holland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接