3

コンテンツスクリプトのデータをpopup.htmlに送信する方法がわかりません。クリックされた要素のxpathです。私はクロムエクステンションにはとても新しいので、おそらくそれは明らかです。コンテンツスクリプトからpopup.js/htmlに送信されたメッセージを受け取る方法は?

私はメッセージの受け渡しに関する記事を読んだが、そこには混乱がある。

xpathget.jsからメッセージを送信する方法を理解しましたが、受信する方法がわからず、一部の要素をクリックすると閉じるので、popup.htmlに表示されます。

manifest.jsonを

{ 
    "manifest_version": 2, 
    "name": "Product", 
    "description": "This is a plugin collaborating with product.com", 
    "version": "1.0", 
    "browser_action": { 
    "default_icon": "spy-icon.png", 
    "default_popup": "popup.html", 
    "default_title": "Click here!" 
    }, 
    "icons":{ 
    "64":"spy-icon.png" 
    }, 
    "background": { 
    "scripts": ["authentication.js"] 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["xpathget.js"] 
    } 
    ], 
    "permissions": [ 
    "activeTab", 
    "https://ajax.googleapis.com/", 
    "cookies", 
    "<all_urls>" 
    ], 
    "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'" 
} 

popup.js私はその後、popup.html HTMLを変更popup.jsxpath文字列を送信する必要がありますし、それが行わだと仮定し

$(document).ready(function() { 
    $('body').height(280); 
    $('html').height(280); 
    MESSAGE_GET_HANDLER(){ 
     ALTER_THE_HTML; 
    } 
}); 

xpathget.js

document.onclick= function(event) { 
    if (event===undefined) event= window.event;      // IE hack 
    var target= 'target' in event? event.target : event.srcElement; // another IE hack 

    var root= document.compatMode==='CSS1Compat'? document.documentElement : document.body; 
    var mxy= [event.clientX+root.scrollLeft, event.clientY+root.scrollTop]; 

    var path= getPathTo(target); 
    var txy= getPageXY(target); 
    chrome.runtime.sendMessage({xpath: path}, function() { 
     alert('sent'); 
    }); <== I HAVE TO SEND THIS PATH TO PLUGIN 
} 

function getPathTo(element) { 
    if (element.id!=='') 
     return 'id("'+element.id+'")'; 
    if (element===document.body) 
     return element.tagName; 

    var ix= 0; 
    var siblings= element.parentNode.childNodes; 
    for (var i= 0; i<siblings.length; i++) { 
     var sibling= siblings[i]; 
     if (sibling===element) 
      return getPathTo(element.parentNode)+'/'+element.tagName+'['+(ix+1)+']'; 
     if (sibling.nodeType===1 && sibling.tagName===element.tagName) 
      ix++; 
    } 
} 

function getPageXY(element) { 
    var x= 0, y= 0; 
    while (element) { 
     x+= element.offsetLeft; 
     y+= element.offsetTop; 
     element= element.offsetParent; 
    } 
    return [x, y]; 
} 
+1

エクステンションで実際に何が起こっているのか詳しく説明できますか?ページ上の何かをクリックしてポップアップを開き、メッセージを渡すことになっていますか?ここの流れではっきりしない。 – DelightedD0D

答えて

0

あなたがウェブページ上の任意の場所またはポップアップの外側をクリックしたら、開いているツールバーのポップアップを維持する方法はありません。一旦それが閉じられると、その環境/コンテキスト/オブジェクトとイベントリスナはもう存在しません。
ツールバーのポップアップをプログラムで再オープンすることはできません。

uBlock's element picker does.のようにウェブページに追加されたDOMダイアログ/ divで対話を続けるか、またはchrome.windows.createから'popup'タイプの新しいウィンドウを開きます。

関連する問題