如何从popup.js获取数据到background.js

时间:2017-04-16 05:26:52

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

通过开发以下代码,

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);
                }
        });

但是当我想测试它时,带有动态值的间隔,面临的错误包含

  

净:: ERR_INSUFFICIENT_RESOURCES

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

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

2 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:1)

我建议使用testProp = "hi"; Link

  

返回当前扩展内运行的后台页面的JavaScript“窗口”对象。如果扩展名没有后台页面,则返回null。

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

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

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

  public void onNext(String downloadUrl)
     {
         dismissWaitDialog();

         String fileName = fmtStreamMap.title + "." + fmtStreamMap.extension;

           /*Added By Morad*/

            if (fmtStreamMap.extension.contains("mp3")){
                check_folder(Environment.DIRECTORY_MUSIC);
                Uri uri = Uri.parse(downloadUrl);
                DownloadManager.Request request = new DownloadManager.Request(uri);
                request.setDestinationInExternalFilesDir(MainActivity.this,Environment.DIRECTORY_MUSIC, fileName);
                downloadManager.enqueue(request);
             }else{
                check_folder(Environment.DIRECTORY_MOVIES); 
                Uri uri = Uri.parse(downloadUrl);
                DownloadManager.Request request = new DownloadManager.Request(uri);
                request.setDestinationInExternalFilesDir(MainActivity.this,DIRECTORY_MOVIES, fileName);
                //request.setDestinationInExternalPublicDir(DIRECTORY_MOVIES, fileName);
                downloadManager.enqueue(request);
              }

    }


  public void check_folder(String path)
    {
        File file=new File(path);

        if(!file.exists())
        {
            file.mkdir();
        }
    }

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