将消息从background.js发送到chrome扩展中另一页的content.js

时间:2020-05-23 11:02:57

标签: javascript google-chrome google-chrome-extension google-chrome-app

我想从background.jsContent.js of Another tab发送消息。

我想要的预期流量。

Page1_Content.js --> Background.js --> Page2_Content.js

有可能吗?如果是,那怎么办?

背景JS的代码段。

function sendMessagetoNewTab(tabURL){
      chrome.tabs.query({}, function(tabs) {
      //console.log("sendMessagetoNewTab tabs::::"+JSON.stringify(tabs));
      tabs.forEach(function(entry) {

    if(((entry.pendingUrl===tabURL)||(entry.url===tabURL))){
        console.log("Selected:::"+entry.selected+"::::active:::"+entry.active+":::::forEach tab::::"+JSON.stringify(entry));
    try{
    chrome.tabs.sendMessage(entry.id, {type: "openWindow", xpath: xpath, higlight: true},{},function(message, sender, sendResponse){
        debugger;
        console.log("chrome.tabs.sendMessage sender:::"+JSON.stringify(sender));
        console.log("chrome.tabs.sendMessage message:::"+JSON.stringify(xpath));
        console.log("chrome.tabs.sendMessage sendResponseMain:::"+JSON.stringify(sendResponse));
    });

    }catch(e){
        console.log("Exception::::"+e);
    }
    }
    });
  });
}

function openTabNew(xpath){
    //debugger;
                        var w = 380;
                    var h = 680;
                    var left = (screen.width/1)-(w/1);
                    var top = (screen.height/4)-(h/2);
                    chromeRunTimeId=chrome.runtime.id
                    if(localStorage.getItem("tabId")){
                        chrome.tabs.create({ url: chrome.extension.getURL('landing.html'), active: true }, function(tab) { chrome.windows.create({ tabId: tab.id, type: 'popup', 'width': w, 'height': h, 'left': left, 'top': top, focused: true }) });
                        localStorage.removeItem("tabId");
                    }else{
                        chrome.tabs.create({ url: chrome.extension.getURL('landing.html'), active: true }, function(tab) { chrome.windows.create({ tabId: tab.id, type: 'popup', 'width': w, 'height': h, 'left': left, 'top': top, focused: true }) });
                    }
                    sendMessagetoNewTab(xpath);

}
chrome.runtime.onMessage.addListener(
    function(message, sender, sendResponse) {
        switch(message.type) { 
            case "openWindow":
            openTabNew(message.xpath);
                console.log(">>>>>>>>>>>>>>>>>>>>>>>>> BACKGROUND.JS openWindow::::::"+message.xpath);
                //closeExtraTabs();
                break;
            case "optq_reset_beforeunload":
                localStorage.clear();
                console.log(">>>>>>>>>>>>>>>>>>>>>>>>> BACKGROUND.JS optq_reset_beforeunload::::::"+message.xpath);
                break;
            default:
        }
    }
);

manifest.json

{
  "name": "Add Assertion",
  "version": "1.0",
   "author":"Shailesh Singh",
   "background": { "scripts": ["background.js"],"persistent": false},
  "description": "This Chrome extension Helps to Capture XPath for Users", 
  "manifest_version": 2,
  "content_security_policy": "script-src 'self' http://localhost chrome-extension://ahnjchloffmlcoipmlflaaggopgdgojp ; object-src 'self'",
 "permissions": ["http://localhost/*",
    "https://elevate-dev1.optimizeq.com/","declarativeContent","tabs","storage","notifications","contextMenus","activeTab", "file:///*","http://*/","https://*/","<all_urls>"],
"web_accessible_resources": [
    "images/*.png",
    "css/inner.css",
    "landing.js",
    "js/*",
    "locales/*"
  ],
  "incognito": "split",
  "offline_enabled": true,
  "browser_action":{"default_icon":"square.png","default_popup":"landing.html","browser_style": true},
  "content_scripts": [{
  "run_at": "document_end",
  "all_frames": true,
  "match_about_blank":true,
        "matches": [
            "http://*/*",
            "https://*/*"       
            ],
        "js": ["jquery-3.4.1.js","content.js"],
        "run_at": "document_end"
        }],

  "externally_connectable": {"matches": ["https://*.chrome.com/*","https://wwww.google.com/*","https://wwww.facebook.com/*"]},
  "chrome_url_overrides": {"bookmarks": "landing.html"},

    "icons": {"128": "square.png","64": "square.png","32": "square.png","16": "square.png"}
}

仅Content.js代码段

var newWindow;
    function checkAndSendRequest(elem,responseObj){

        if(typeof elem!=='undefined'&&responseObj&&responseObj.targetPageId&&(window.location.href.indexOf("localhost")!=-1||window.location.href.indexOf("elevate")!=-1)){
            projectId=localStorage.getItem("project_id");
            exeId=localStorage.getItem("exeId");
            xpath=getElementXPath(elem);

            newWindow=window.open(responseObj.pageUrl, "_blank");
            //opening new tab here aka Page2

            window.resizeTo(window.outerWidth-500,window.outerHeight);

            sendDetailsToBG_Step2(xpath,projectId,responseObj.targetPageId,exeId,responseObj.highlight,responseObj.pageUrl);
            }
    }

    function sendDataToBackgroundJs_Step1(xpath,event){
        mouseX = Math.round (event.clientX);
        mouseY = Math.round (event.clientY);
        var elem = document.elementFromPoint(mouseX, mouseY);
        var url='';
        var targetPageId;
        var title='';
        var flags=false;
        var responseObj;
        //debugger;
        if(elem!='null'&&elem){
        if(elem.tagName=="circle"){
            showAnimation=false;
            responseObj=getData(elem.parentElement,0);
            checkAndSendRequest(elem,responseObj);

        }else if(elem.tagName=="g"){
            if(elem.tagName=='g'&&elem.classList.contains('node')){
                showAnimation=false;
                responseObj=getData(elem.firstElementChild,0);
                checkAndSendRequest(elem,responseObj);
            }
        }else{
            //debugger;
            console.log("click inside circular area properly....");
        }
        }else{
            console.log("click inside circular area properly.");
        }

    }



function getData(elem){
        var returnObj={};

            $(elem.childNodes).each(function(i, item) {
                if(item.classList.contains('targetPageId')){
                    var targetPageId =parseInt(item.textContent);
                    returnObj.targetPageId=targetPageId;
                }else if(item.classList.contains('treeUrl')){
                    var pageUrl=item.textContent;
                    returnObj.pageUrl=pageUrl;
                }else if(item.classList.contains('treeTitle')){
                    var pageTitle=item.textContent;
                    returnObj.pageTitle=pageTitle;
                }
        });
        returnObj.highlight=true;
        return returnObj;
}

    function sendDetailsToBG_Step2(xpath,projectId,targetPageId,exeId,highlight,pageUrl){
        //debugger;
    var loginres=JSON.parse(localStorage.getItem('STORAGE_LOGIN_RES'));
    var token=loginres.token;
    var prefix=loginres.type;
    var serverName=window.location.origin;
     serverName="http://localhost:8080";
    //serverName=serverName+"/v2/";

        localStorage.setItem("projectId",projectId);
        localStorage.setItem("exeId",exeId);
                if(typeof chrome.app!=='undefined'){
                if(typeof chrome.app.isInstalled!=='undefined'){
                var object={'type': "openWindow", 'xpath': xpath, 'prefix': prefix, 'token': token, 'projectId': projectId, 'exeId': exeId, 'targetPageId': targetPageId,'serverName':serverName,'highlight':highlight,'pageUrl':pageUrl};
                //var object={'type': "setXPathNew", 'projectId': projectId};
                chrome.runtime.sendMessage(object);
                }else{
                    reloadPage(extensionId);
                    }
                }else{
                    //reloadPage(extensionId);
                    }
    }

    function reloadPage(extensionId){
        debugger;
        try{
            chrome.runtime.connect(extensionId);
        }catch(e){
            console.log("reloadPage:::"+e);
            var r = confirm("disconnected Please Refresh the Page \n Press OK TO Refresh Page.");
          if (r) {
            window.location.reload(true);
          } 

        }
    }

0 个答案:

没有答案