window.open() 对象有一些时髦的参数列表...
有没有办法做类似 window.open({options..}); 的事情
想法?
您可以将
options
作为 URL 参数传递:
window.open( myURL + "/?options=" + JSON.stringify(options) );
该语言没有内置这样的功能。
但是,自己编写一个相当容易。
例如:
function popup(url, name, options) {
if (arguments.length === 2) {
options = name;
name = options.name;
}
var features = false;
for (var key in options) {
if (!options.hasOwnProperty(key)) continue;
if (key === "name") continue;
if(features)
features += ",";
features += key + "=";
if (!options[key])
features += "no";
else if (options[key] === true)
features += "yes";
else
features += options[key];
}
return window.open(url, name, features);
}
嗯
function newWindow(options) {
var opts = [], keys = ['height', 'width', 'scrollable', /* all those options */];
for (var i = 0; i < keys.length; ++i) {
if (keys[i] in options)
opts.push(keys[i] + '=' + options[keys[i]]);
}
return window.open(options.url, options.name, opts.join(','));
}
不。这是一个用 javascript 调用的 dom 函数。
无论如何,“选项对象”策略实际上只是在 JSON 概念中得到了如此广泛的应用,而 DOM 规范早在一段时间内就出现了。
如果你想要一个开窗器助手,你可以构建一个带有参数字段的 JS 对象并重写 toString() 。
不,但你可以很容易地编写自己的包装器。
我不这么认为,因为这些功能是逗号分隔的窗口功能列表
来自MDC
var WindowObjectReference = window.open(strUrl,
strWindowName
[, strWindowFeatures]);
没有什么可以阻止你编写一个包装器,尽管它接受一个对象,然后使用适当的参数调用
window.open()
您可以创建自己的函数来解析 JSON 对象,并根据解析使用特定参数调用 window.open() 函数?
显然这不存在。 最简单的解决方案是将其从 json 转换为用于参数的格式。 这是一种使用一些全局正则表达式在一行中完成此操作的简单方法:
JSON.stringify(properties).replace(/true/g, "yes").replace(/false/g, "no").replace(/:/g, '=').replace(/}|{|"/g, '');
这适用于几乎所有浏览器,我也在 Internet Explorer 11 中测试了它。
更现代的方法是使用replaceAll:
JSON.stringify(properties).replaceAll("true", "yes").replaceAll("false", "no").replaceAll(':', '=').replaceAll(/}|{|"/g, '');
此方法的浏览器支持较少,但结果相同。