0

挿入されたスクリプトに連想配列を配信するのに問題があります。

Global.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);

script.js

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

           break;

「通常の」配列でそれを行うとき、それはうまくいきます!

しかし、連想配列を提供するとき、例えばを呼び出すとき、私は常に「未定義」になります。settings ["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 に答える