【问题标题】:Emiting array from content script to main addon script将数组从内容脚本发射到主插件脚本
【发布时间】:2014-03-12 16:27:07
【问题描述】:

我删除存储在主脚本中的简单存储数组中的元素。这会在简单存储数组中创建空元素。所以我运行一个脚本以将一个新数组返回给主插件脚本(不包含空元素)和我将它分配给简单存储数组。但主脚本只获取一个元素而不是整个数组。如何获取整个数组? 以下是主要的插件代码部分:

text_entry.port.on("del", function (todel) {
  console.log(todel);
  site_l=ss.storage.sites.length;

  for(var i=0;i<site_l;i++)
  {
    if(ss.storage.sites[i]==todel)
    {
        delete ss.storage.sites[i];
    }   
  }
  text_entry.port.emit("c",ss.storage.sites);
  text_entry.port.on("cd",function(arr){
    ss.storage.sites=[];
    ss.storage.sites=arr;
  });

});

返回不包含空元素的新数组的脚本:

self.port.on("c",function(arr)
{
    var a=arr;
    var l=a.length;

    function isEmpty(element) {
    if(element!=null)
      return true;
    }

    a=a.filter(isEmpty);
    self.port.emit("cd",a);
});

【问题讨论】:

  • 很难说你在这里做什么 - text_entry 是一个 page-mod 实例,还是什么?您能否提供一个简化的示例,供人们自己运行和测试?
  • 如果您有非 sdk 版本,我可以帮助您。你能做一个简单的测试用例吗,我可以为你做一个演示插件。
  • @canuckistani 它的面板实例。用户从面板中的列表中选择项目并单击删除按钮,这使面板内容脚本从列表中获取所选项目并将其存储在本地数组中。现在它需要将该数组发送到主脚本。我找到了一种方法.将数组转换为字符串并将其传递给主脚本并使用 split 使其成为数组。

标签: firefox-addon firefox-addon-sdk add-on


【解决方案1】:

替换

for(var i=0;i<site_l;i++) {
  if(ss.storage.sites[i]==todel) {
    delete ss.storage.sites[i];
  }   
}

ss.storage.sites.splice(ss.storage.sites.indexOf(todel), 1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多