не могу передать координаты мыши из content_script во всплывающее окно (расширение Chrome)

Надеюсь, это не расплывчато...

Я работаю над своим первым расширением для Google Chrome, с его помощью я пытаюсь преобразовать этот скриптСм. ниже. Я сделал всплывающее окно с расширением. Идея состоит в том, что поле, которое появляется на этой странице в правом нижнем углу, вместо этого будет отображаться во всплывающем окне расширения, в то время как динамически (в реальном времени) будут вытягиваться координаты мыши с фактической страницы. Я подумал, что способ сделать это - внедрить content_script, который извлекает координаты мыши -> отправить их в background.html -> передать их затем в popup.js

Я обдумал документацию Google и последовал советам по нескольким сообщениям, посвященным этой проблеме, но, похоже, я не могу заставить это работать. Я думаю, возможно, у меня проблемы с определением chrome.extension.sendRequest, кто-нибудь делал что-то подобное раньше? У вас есть примеры? Я иду об этом неправильно?

//ОБНОВИТЬ:

(примечание: это не работает)

manifest.json
====================
"browser_action": {
  "default_icon": "icon.png",
  "default_popup": "popup.html"
},
"content_scripts": [
  {
    "matches": ["<all_urls>","http://*/*","https://*/*"],
    "js": ["coord.js"]
  }
]


content_script (i.e. coord.js)
====================
var x = event.clientX,
    y = event.clientY;  //record down the x and y

chrome.extension.onRequest.addListener(         //listen to request
  function(request, sender, sendResponse) {
    if (request.greeting == "coord"){
      sendResponse({farewell: JSON.stringify([x,y])});//send coordinates to poupup
    }
  });


popup.js
====================
    chrome.tabs.getSelected(null, function(tab) {    //ask for coordinates
      chrome.tabs.sendRequest(tab.id, {greeting: "coord"}, function(response) {
        var x = JSON.parse(response.farewell)[0],
            y = JSON.parse(response.farewell)[1];

        document.getElementById("main").innerHTML = x + "," + y;
      });
    });

Опять же, я пытаюсь адаптировать этот скрипт, который я написал:

    var width, height, divObj, interval;
    var l, t, r, b;

    function setup() {
            width = window.innerWidth;
            height = window.innerHeight;
            interval = setInterval(loadDiv, 50);
    }

    document.onmousemove=getMouseCoordinates;

    function getMouseCoordinates(event) {
        ev = event || window.event;

        l = ev.pageX; t = ev.pageY;
        r = width - l; b = height - t;

        divObj.innerHTML = '<div style="position: absolute; left: 20px;">.class {<br>&nbsp;&nbsp;&nbsp;position: absolute;<br>&nbsp;&nbsp;&nbsp;left: ' + l + 'px;<br>&nbsp;&nbsp;&nbsp;top: ' + t + 'px;<br>}</div><div style="position: absolute; left: 250px;">.class {<br>&nbsp;&nbsp;&nbsp;position: absolute;<br>&nbsp;&nbsp;&nbsp;right: ' + r + 'px;<br>&nbsp;&nbsp;&nbsp;bottom: ' + b + 'px;<br>}</div>';      
    }

    function loadDiv() {
        divObj = document.getElementById("divPlacement");
    }

    document.write('<div id="divPlacement" style="position: absolute; right: 25px; bottom: 25px; z-index: 1000; color: #fff; font-family: monospace; background-color: #000; opacity:0.4; filter:alpha(opacity=40); -webkit-border-radius: 5px;-moz-border-radius: 5px; border-radius: 5px; padding: 10px; width: 420px; height: 80px; border: solid #ccc;"></div>');

    setup();

person Nick Briz    schedule 10.04.2012    source источник
comment
Вы отправляете данные прямо с content script на popup.   -  person Derek 朕會功夫    schedule 10.04.2012
comment
Ваш базовый код недействителен (loadDiv не определен) и даже не является расширением Chrome. Можете ли вы показать код вашей текущей попытки?   -  person Rob W    schedule 10.04.2012
comment
Привет, Роб, только что обновил исходный скрипт (в сообщении отсутствовал некоторый код), а также опубликовал мое расширение src на данный момент (включая предложение Дерека). спасибо!   -  person Nick Briz    schedule 10.04.2012


Ответы (1)


Подробнее: http://code.google.com/chrome/extensions/messaging.html#simple

popup.html
===============
chrome.tabs.getSelected(null, function(tab) {    //ask for coordinates
  chrome.tabs.sendRequest(tab.id, {greeting: "coord"}, function(response) {
    var x = JSON.parse(response.farewell)[0],
        y = JSON.parse(response.farewell)[1];
    console.log(x);  //Will give you mouse x
    console.log(y);  //Will give you mouse y
  });
});

content script
===============
var x = event.clientX,
    y = event.clientY;  //record down the x and y

chrome.extension.onRequest.addListener(         //listen to request
  function(request, sender, sendResponse) {
    if (request.greeting == "coord"){
      sendResponse({farewell: JSON.stringify([x,y]));//send coordinates to poupup
    }
  });
person Derek 朕會功夫    schedule 10.04.2012
comment
1. Сообщения по каналу сериализуются в формате JSON, поэтому вам не нужно использовать JSON.* методы. 2. Даже если вы используете его, не используйте JSON.parse дважды в одной и той же строке. Вместо этого сохраните проанализированную строку JSON в переменной. - person Rob W; 10.04.2012
comment
@RobW - Ура! Никогда не знаешь этого! - person Derek 朕會功夫; 11.04.2012