0

我在将关联数组传递到注入脚本时遇到问题。

全球.html

  var settings = new Array();

  settings["accountID"] = safari.extension.settings.getItem("accountID");
  settings["accountName"] = safari.extension.settings.getItem("accountName");
  settings["accountEmail"] = safari.extension.settings.getItem("accountEmail");

            safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("settingsArray", settings);

脚本.js

 switch (msgEvent.name) {
      case "settingsArray":
           var settings = new Array();
           settings = msgEvent.message;
           console.log("accountID: " + settings["accountID"]);

           break;

当我使用“普通”数组时,它工作正常!

但是在传递关联数组时,我总是在调用时得到“未定义”。设置["accountID"]

有谁知道出了什么问题?

4

1 回答 1

1
  1. 当您应该使用对象时,您正在使用数组。

    var settings = new Array();  // Wrong
    var settings = {};           // Right (and better than "new Object()")
    
  2. 您不必要地使用字符串形式的属性访问。

    settings["accountID"] = …;   // Works, but too much typing
    settings.accountID = …;      // Exact same functionality
    

    如果属性名称不是有效的 JavaScript 标识符(例如foo["holy!*#$! it works"] = true)或者如果您需要从变量构造属性名称(例如foo["account"+n] = "active";),您只需要在获取/设置属性值时使用方括号表示法。

  3. 您正在创建新对象,然后将它们扔掉。

     var settings = new Array();  // Makes a new array referenced by a variable
     settings = msgEvent.message; // Discards the array and changes the variable
                                  // to reference a new object
    
于 2012-06-20T15:39:12.320 回答