如何在许多页面上使用一个javascript对象?

时间:2013-02-09 06:25:45

标签: javascript object global

我想向对象添加属性并将该对象传递给另一个页面。

2 个答案:

答案 0 :(得分:1)

一些事情:

  1. 我会将命名空间中的函数组合在一起;
  2. 您不需要Base64编码,因为encodeURIComponent()就足够了;
  3. 这不适合大型物体,你需要localStorage;
  4. 您的代码有一些陷阱,例如当href已包含?时;
  5. 我已经像这样重写了它:

    DataTransferService = {
      sendToUrl: function(obj, url, name) {
        var value = JSON.stringify(obj);
    
        name = name || 'data';
    
        return url + (url.indexOf('?') === -1 ? '?' : '&') + name + '=' + encodeURIComponent(value);
      },
      receiveFromCurrentUrl: function(name) {
        return receiveFromUrl(window.location.href, name);
      },
      receiveFromUrl: function(url, name) {
        var value;
    
        name = name || 'data';
        url = url || window.location.href;
    
    
        if ((value = this.getUrlParameter(name, url)) !== null) {
          return JSON.parse(value);
        }
      },
      getUrlParameter:function(name, url) {
        var p, qs;
    
        if ((p = url.indexOf('?')) === -1) {
          return null;
        }
    
        qs = url.substr(p + 1).split('&');
        for (var i = 0, len = qs.length; i != len; ++i) {
          var pair = qs[i].split('=');
          if (pair[0] === name) {
            return decodeURIComponent(pair[1]);
          }
        }
    
        return null;
      }
    };
    

    使用:

    var obj = {
        a: 123,
        b: 456,
        c: [1, 3, 5]
    };
    
    var url = DataTransferService.sendToUrl(obj, '/path/to/page');
    // "/path/to/page?data=..."
    location = url;
    

    在接收页面上:

    var obj = DataTransferService.receiveFromCurrentUrl();
    // work with obj here
    

答案 1 :(得分:0)

放入全局js文件的函数..

function GotoPage(relUrl) {
  var json = JSON.stringify({param1:val1, param2:val2});
  window.location.href = relUrl.concat('?data=').concat(Base64.encode(json));
}

function GetUrlVars() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

假设我们在page2的.js文件中从page1导航到page2 ..你会写:

var base64data = GetUrlVars()['data']
var jsondata = Base64.decode(base64data)
var data = JSON.parse(data);
var param1 = data.param1;
//do something with the objects properties

对于Base64实施,请参阅:How can you encode a string to Base64 in JavaScript?