1

因此,我正在尝试制作一个 chrome 扩展来存储“名称”之类的内容并将它们列为按钮,以便我可以与列表中的任何人共享当前页面。现在,我正在尝试从 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 页,一页用于添加具有 2 个输入的新人,另一页用于获取值(至少现在,我计划在找到方法后立即将它们列为按钮)

这是两者的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

一方面,您的事件侦听器声明了两个从未调用过的本地函数getValues和。saveChanges您可以删除这些外部函数声明,让这两个函数的主体成为事件处理程序的主体,如下所示:

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 开发人员工具的 Sources 选项卡中调试您的脚本。我会在这些事件处理程序中设置一些断点并确保它们被正确命中。

二,StorageArea.set(object items, function callback)是set方法的签名。要设置两个值,您需要传递一个对象而不是两个不同的对象:

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

最后,没有真正的理由使用window.onload(我认为您打算在window.onload这里使用,对吗?)或两个不同的DOMContentLoaded听众;为什么不将它们合并为一个(不要忘记检查是否getElementById返回 null,因为您似乎在两个页面之间共享此脚本)?

编辑:另外,您似乎正在分别为您的设置/获取混合同步/本地存储。

于 2013-10-05T07:39:37.163 回答