阅读(834) 赞(4)

window方法:openDialog()

2018-08-24 14:27:56 更新

openDialog()方法

注意:此openDialog()方法是非标准的,不要在面向Web的生产站点上使用它:它不适用于每个用户。实现之间可能存在很大的不兼容性,并且行为可能在将来发生变化。

window.openDialog()是window.open()的一个扩展。它的行为相同,只是它可以选择性地接受一个或多个参数通过windowFeatures,并且windowFeatures本身的处理方式略有不同。

可选参数(如果存在)捆绑在JavaScript Array对象中,并作为名为window.arguments的属性添加到新创建的窗口中。它们可以随时在窗口的JavaScript中引用,包括在执行load处理程序期间。然后,可以使用这些参数来向对话窗口传递参数。

对openDialog()的调用立即返回。如果要在用户关闭对话框之前阻止调用,请将modal作为windowFeatures参数提供。请注意,这也意味着用户在关闭模式对话框之前将无法与开启窗口进行交互。

openDialog()方法语法

newWindow = openDialog(url,name,features,arg1,arg2,...)
newWindow
打开的窗口
url
要在新打开的窗口中加载的URL。
name
窗口名称(可选)。
features
详情请参考window.open()。
arg1,arg2,...
要传递给新窗口的参数(可选)。

openDialog()方法示例

var win = openDialog("http://example.tld/zzz.xul", "dlg", "", "pizza", 6.98);

笔记

新功能

all-最初启动(或关闭("all=no"))所有chrome(除行为的标志chrome,dialog和modal)。这些可以被覆盖(因此"menubar=no,all"将打开除menubar之外的所有chrome)此功能被window.open()明确忽略。但是window.openDialog()发现它很有用,因为它有不同的默认假设。

默认行为

除非明确地关闭(” chrome=no“),否则该chrome和dialog功能总是启用的。openDialog()以与window.open()同样的方式处理缺少特征参数;也就是说,一个空字符串将所有功能设置为off;除了chrome和dialog,默认为on。如果features参数是零长度的字符串,或只包含一个或多个的行为特征(chrome,dependent,dialog和modal)chrome特征被假定为“OS的选择”。也就是说,窗口创建代码没有给出特定的指令,而是允许选择最适合该操作系统上的对话框的chrome。

将额外参数传递给对话框

要将额外的参数传递到对话框中,您只需在windowFeatures参数后面提供它们:

openDialog("http://example.tld/zzz.xul", "dlg", "", "pizza", 6.98);

然后,额外的参数将被打包到类型Array的名为argumentstype的属性中,并且此属性将添加到新打开的对话框窗口中。

要从对话框代码中访问这些额外参数,请使用以下方案:

var food  = window.arguments[0];
var price = window.arguments[1];

请注意,您可以从对话框代码中的任何位置访问此属性。

从对话框返回值

由于window.close()删除了与对话框窗口关联的所有属性(即从对话框加载的JavaScript代码中指定的变量),因此无法使用全局变量(或任何其他构造)将返回值传递回关闭操作。

为了能够将值传递回调用者,您必须通过额外的参数提供一些对象。然后,您可以在对话框代码中访问此对象并在其上设置属性,其中包含要返回或保留的window.close()操作值。

var retVals = { address: null, delivery: null };
openDialog("http://example.tld/zzz.xul", "dlg", "modal", "pizza", 6.98,
    retVals);

如果在对话框代码中设置retVals对象的属性,如下所述,现在可以在openDialog()调用返回后,您现在可以通过retVals数组访问它们。

在对话框代码中,您可以按如下方式设置属性:

var retVals = window.arguments[2];
retVals.address  = enteredAddress;
retVals.delivery = "immediate";

规范

这不是任何规范的一部分。

浏览器兼容性部分

新的兼容性表格处于测试阶段

电脑端 移动端
Chrome
Edge
Firefox
Internet Explorer
Opera
Safari
Android webview Chrome for Android
Edge Mobile Firefox for Android
Opera for Android
iOS Safari
基本支持
(非标准)
不支持
? 不支持
? ? ? 不支持
不支持
? 不支持
? ?