IgorBee
@IgorBee
JS,VBS,3D.Web с 07.2015

Как отправить объект из фоновой страницы на расширение Google?

//манифест
{
  "manifest_version": 2,
  "name": "Help Panda",
  "version": "2.0",
  
  "icons": {
    "128": "panda.png"
  },
  "content_scripts": [
    {
      "matches": [ "*://*/*" ],
      "js": [ "content.js" ]
    }
  ],

  "background": {
    "scripts": ["background.js"]
  },
      "browser_action": {
        "default_title": "Help Panda",
        "default_icon": "panda.png",
        "default_popup": "popup.html"
    }
	
}

//content.js
chrome.extension.sendMessage({objChromMes:localNumb});

//popup.js
chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
var a = request.objChromMes; // данные о сайте
 // данные о проведенном времени
// тут делаем с этими данными что хотим.
menu.innerHTML =a;
  });


<!doctype html>
<html>
  <head>
    <title>Потерянное время LostTime</title>
	<link href="css.css" rel="stylesheet" type="text/css"/> 
  </head>
  <body>
  <div id="options"><!-- меню -->
<h3>first app</h3>
</div>
<div id="dannie"></div> <!-- в этот блок буду загружать данные, которые будут показываться пользователю-->
    <script src="popup.js"></script><!-- скрипт, выполняющийся при нажатии на иконку расширения-->
  </body>
</html>


Почему не работает?
Как же правильно отправить с сайта на расширение хрома объект.
  • Вопрос задан
  • 983 просмотра
Решения вопроса 1
IgorBee
@IgorBee Автор вопроса
JS,VBS,3D.Web с 07.2015
/// content.js
calc=ваш объект или массив,что угодно.
chrome.runtime.sendMessage({greeting:calc});


background.js
	chrome.runtime.onMessage.addListener(

   function(request, sender, sendResponse) {

   localStorage['abbrev'] += request.greeting;

  });


poupop.js

chrome.storage.local.get('channels', function (result) {
        channels = result.channels;
       
        menu.innerHTML +=channels;
    });


1.Отсылаем сообщение в баграунд джс.
2.Бакграунд ДЖс уже иммеет доступ к записи на локальное хранилище расширения.
3.С поуп считываем запись в локальном хранилище.

ЗЫ,напрямую нельзя с контент сохранять в локальное хранилище и считывать в расширении.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
kzakhariy
@kzakhariy
PHP Developer
Как отправить объект из фоновой страницы на расширение Google?

Вопрос не верно составлен, как я понимаю нужно отправить сообщение с сайта в background запущеного приложения

{
  "name": "App",
  "description": "Desc",
  "version": "1.1",
  "icons": {
    "16": "icon-16.png",
    "128": "icon-128.png"
  },
  "browser_action": {
    "default_icon": "icon-16.png",
    "default_popup": "popup/popup.html"
  },
  "background": {
    "scripts": [
      "js/listener.js"
      "js/background.js",
    ]
  },
  "externally_connectable": {
    "matches": [
       "*://*.site.com/*",
    ]
  },
  "manifest_version": 2,
  "minimum_chrome_version": "35",
  "permissions": [
    "webNavigation",
    "notifications",
    "tabs",
  ]
}


//Listener.js
//Слушаем сообщения и возвращаем ответ
chrome.runtime.onMessageExternal.addListener(function (message, sender, sendResponse) {
    console.log(message);
    console.log(message.type);
    if(message.type == 'checkBrowserAppInstalled'){
        sendResponse({
            installed: true
        })
    }
    return true;
});


//site.com
//Отправляем с сайта сообщение приложению
var BROWSERAPPID = 'ID OF APP';
var OBJECT_TO_SEND = {type: "checkBrowserAppInstalled", data : [1,2,3]};
var checkApp = function () {
                    return new Promise(function (resolve, reject) {
                        chrome.runtime.sendMessage(BROWSERAPPID, OBJECT_TO_SEND , null, function (response) {
                            if (response && response.installed === true) {
                                resolve(response);
                            } else {
                                reject({reason: "APP_NOT_FOUND"})
                            }
                        });
                    });
                }
checkApp().then(function(){
    ...
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы