Получить координаты мыши всплывающего окна, а не фона - PullRequest
0 голосов
/ 17 июля 2011

У меня есть небольшая проблема здесь. Основываясь на моем предыдущем вопросе, я разработал расширение, которое записывает щелчки мышью и отмечает место.

Однако, когда я нажимаю на ссылку, чтобы открыть всплывающее окно; отмеченные щелчки мыши находятся в фоновом окне, а не во всплывающем окне.

Это проблема безопасности или что-то в этом роде?

background.html

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    chrome.tabs.captureVisibleTab(null, {format:"png"}, function(dataUrl){

    var img = new Image();
    img.onload = function(){
        var canvas = document.getElementById("canvas");
        canvas.width = img.width;
        canvas.height = img.height;

        var ctx = canvas.getContext("2d");

        ctx.drawImage(img, 0, 0);
        ctx.arc(request.x, request.y, 5, 0, Math.PI*2, true);
        ctx.fillStyle = "rgb(255,0,0)";
        ctx.fill();

        chrome.tabs.create({url: canvas.toDataURL("image/png")});
    };
    img.src = dataUrl;

});
sendResponse({});
});
<body>
    <canvas id="canvas"></canvas>
</body>

content_script.js:

window.addEventListener("click", function(event) {
    chrome.extension.sendRequest({x: event.x, y: event.y});
});

Ответы [ 2 ]

1 голос
/ 17 июля 2011

Это происходит потому, что текущее окно и сфокусированное окно - это две разные вещи в Chrome API. Передача null в chrome.tabs.captureVisibleTab() занимает текущего окна , что для всплывающих окон означает фоновое окно. Как сказано в документах :

Текущее окно - это окно, содержащее код, который выполняется в данный момент. Важно понимать, что это может отличаться от самого верхнего или сфокусированного окна.

Чтобы сделать скриншот окна, отправившего запрос, нам нужно указать его явно:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    chrome.tabs.captureVisibleTab(sender.tab.windowId, {format:"png"}, function(dataUrl){
        ...
    });
});
0 голосов
/ 17 июля 2011

Если всплывающее окно не активно (показано), вы ничего не можете сделать с ним на фоновой странице. Предполагая, что вы следуете этому факту.

Убедитесь, что ваши щелчки мыши находятся в этом всплывающем окне DOM. Так что в вашем всплывающем окне, слушатели.

...