如何传递选项参数的JSON对象以打开新窗口?

时间:2010-03-10 20:42:08

标签: javascript json window.open

window.open()对象有一些时髦的参数列表...

有没有办法像window.open({options ..});

那样做

思想?

7 个答案:

答案 0 :(得分:2)

您可以将options作为网址参数传递:

window.open( myURL + "/?options=" + JSON.stringify(options) );

答案 1 :(得分:2)

该语言没有内置此类设施。

但是,自己写一个很容易 例如:

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);
}

答案 2 :(得分:2)

以及

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(','));
}

答案 3 :(得分:1)

没有。这是一个用javascript调用的dom函数。

在任何情况下,'选项对象'策略实际上只是在JSON的概念中得到了很好的使用,DOM规范在一段时间之前就已经存在了。

如果你想要一个开窗器助手,你可以用参数的字段构建一个JS对象,并覆盖toString()。

答案 4 :(得分:1)

不,但你可以轻松编写自己的包装。

答案 5 :(得分:1)

我不这么认为,因为这些功能是以逗号分隔的窗口功能列表

来自 MDC

var WindowObjectReference = window.open(strUrl, 
                                        strWindowName  
                                        [, strWindowFeatures]);

没有什么可以阻止你写一个包装器,虽然它接受一个对象然后用适当的参数调用window.open()

答案 6 :(得分:1)

您可以创建自己的函数来解析JSON对象,并根据解析调用具有特定参数的window.open()函数吗?