我想从background.js
到Content.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);
}
}
}