【问题标题】:how to get data from popup.js to background.js如何从 popup.js 获取数据到 background.js
【发布时间】:2017-09-12 00:59:00
【问题描述】:

通过开发以下代码,

Popup.js

 $( function() {
    $( "#slider-range-min" ).slider({
      range: "min",
      value: 5,
      min: 1,
      max: 15,
      slide: function( event, ui ) {
        $( "#amount" ).val( ui.value );
        var port = chrome.extension.connect({
              name: "Sample Communication"
         });
         port.postMessage(ui.value);

      }
    });
    $( "#amount" ).val( $( "#slider-range-min" ).slider( "value" ) );
  } );

Background.js(监听器)

chrome.extension.onConnect.addListener(function(port) {
      port.onMessage.addListener(function(msg) {
           timer=msg;
      });
 })
    $(function(){

         interval = 1000 * 60 * timer; // where X is your every X minutes
         setInterval(func1, parseInt(interval));
         setInterval(func2,300);

    });

Background.js(加载数据)

$.get('link', 
            function(data)
        {  
            if (data.total != 0) {

                    $.each(data.issues, function(k, v) {
                      if (!list.some(function(o) {
                          return o.key === v.key
                        }))
                        list.push({
                          "key": v.key,
                          "title": v.title,
                          "sent": false
                        });
                    }); 
                    //console.log(list);
                }
        });

但是当我想测试它时,使用间隔的动态值,遇到错误,其中包含

net::ERR_INSUFFICIENT_RESOURCES

有人可以帮助我解释为什么我在将其用作动态时会出现此错误,但是当我将特定值用作数字时却可以正常工作。

更新 正如我检查的问题与默认值为0有关, 所以错误的事情是当我更改进度值时,我的后台 js 中没有任何变化,因为我检查了 console.log 并且每次我点击弹出窗口中的扩展按钮时,该值都是默认值并且更改不会保存。

【问题讨论】:

  • 如果您的计时器变量最初为 0 或未定义,setInterval 将每秒运行数千或数百万次。
  • 就像chrome.extension.getBackgroundPage() 一样简单。不需要消息或任何你想要做的事情。
  • @wOxxOm 默认为 5000
  • @MarcGuiselin 它的工作原理
  • @programmer.okz 我怀疑timer 没有全局设置。因此,当您运行 timer = msg; 时,timer 在您运行 interval = 1000 * 60 * timer; 时不存在

标签: jquery google-chrome jquery-ui google-chrome-extension google-chrome-devtools


【解决方案1】:

建议如下:

var timer = 0;
chrome.extension.onConnect.addListener(function(port) {
  port.onMessage.addListener(function(msg) {
    if(!isNaN(msg)){
      timer = parseInt(msg);
    }
  });
});
$(function(){
  var interval = 1000 * 60 * timer; // where X is your every X minutes
  setInterval(func1, interval);
  setInterval(func2, 300);
});

【讨论】:

    【解决方案2】:

    我建议使用chrome.extension.getBackgroundPage() (Link)

    返回当前扩展中运行的背景页面的 JavaScript“窗口”对象。如果扩展没有背景页面,则返回 null。

    因此,如果您想在后台页面中存储 smth 或者甚至执行其中定义的方法,只需在您的 popup.js 中使用此方法即可。假设您的背景页面中有一个属性:

    testProp = "hi";
    

    然后在弹出窗口中,您可以访问该值或设置它:

    chrome.runtime.getBackgroundPage(function (page) {
        // Do what you want with the page
        page.testProp = "test from the popup";
    });
    

    您可以通过这种方式将一些数据发送到后台页面,然后将其存储在那里。您可以从后台页面等调用函数。

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 2023-03-25
      • 2012-08-29
      • 2015-04-19
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多