1

そのため、「名前」などを保存し、それらをボタンとしてリストして、現在のページをリストの誰とでも共有できるようにするクロム拡張機能を作成しようとしています。現在、chrome.storage (クラウド) に読み書きしようとしていますが、私の JS は実際には何もしていません! コードは問題ないように見えますが、何もしません!

window.load = myJs;

function myJs() {

    document.addEventListener('DOMContentLoaded', function () {
        var link = document.getElementById('get');
        link.addEventListener('click', function () {
            function getValues() {
                chrome.storage.local.get('Name', function (result) {
                    Name = result;
                    alert(result);
                });
            }
        });
    });
    document.addEventListener('DOMContentLoaded', function () {
        var link = document.getElementById('savechanges');
        link.addEventListener('click', function () {
            function saveChanges() {
                var newname = getElementById("newname");
                var newemail = getElementById("newmail");
                if (!newname) {
                    message('Error: No name specified');
                    return;
                }
                if (!newemail) {
                    message('Error: No E-mail specified');
                    return;
                }
                chrome.storage.sync.set({
                    'Name': newname
                }, {
                    'Email': newemail
                }, function () {
                    message('New contact added');
                    window.location.href = "popup.html";
                });
            }
        });
    });
}

したがって、私の拡張機能には 2 つのページがあり、1 つは 2 つの入力を使用して新しい人を追加するためのもので、もう 1 つは値を取得するためのものです (少なくとも今のところ、方法がわかり次第、それらをボタンとしてリストする予定です)。

ここに両方の​​htmlがあります

page.html

 <body>
   <input type="text" id="newname" placeholder="Enter new contact name">
    <input type="text" id="newemail" placeholder="Enter new contact email">
    <button name="Add" id="savechanges" class="m-btn">Add new contact</button>
    <script src="popup.js"></script>
  </body>

popup.html

 <body>
   <button type="button" id="get" class="m-btn">Get</button>
    <script src="popup.js"></script>
    <a href="page.html"><input type="submit" name="add" value="Add" class="m-btn"></a>
  </body>
4

1 に答える 1

0

1 つは、イベント リスナーが、決して呼び出されない2 つのローカル関数getValuesとを宣言していることです。saveChanges次のように、これらの外側の関数宣言を削除して、これら 2 つの関数の本体をイベント ハンドラーの本体にすることができます。

document.addEventListener('DOMContentLoaded', function () {
  var link = document.getElementById('get');
  link.addEventListener('click', function () {
    chrome.storage.local.get('Name', function (result) {
      // Check chrome.runtime.lastError to see if there was an error
      Name = result;
      alert(result);
    });
  });
});

ポップアップ/バックグラウンド ページを調べて、Chrome の開発者ツールの [ソース] タブでスクリプトをデバッグできるはずです。これらのイベント ハンドラーにいくつかのブレークポイントを設定し、適切にヒットするようにします。

2 つStorageArea.set(object items, function callback)は set メソッドのシグネチャです。2 つの値を設定するには、2 つの異なるオブジェクトではなく、1 つのオブジェクトを渡します。

chrome.storage.sync.set({
    'Name': newname,
    'Email': newemail
  }, function() {
    // Check chrome.runtime.lastError to see if there was an error
    ...
  });

最後に、 2 つの異なるリスナーを使用する本当の理由はありませんwindow.onload(ここで使用するつもりだったと思いますよね?)。それらを 1 つに統合してみませんか (このスクリプトを 2 つのページで共有しているように見えるため、null を返すことを確認することを忘れないでください)。window.onloadDOMContentLoadedgetElementById

編集:また、セット/取得の同期/ローカルストレージをそれぞれ混在させているようです。

于 2013-10-05T07:39:37.163 に答える