I have created the following code to do something like the title.However, the function does not ignite and there are no errors.How can I send data from background.js to popup.js?
background.js
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
chrome.tabs.query({active:true, windowId:chrome.windows.WINDOW_ID_CURRENT}, function(result){
chrome.tabs.sendMessage(result.shift().id, {
command: "get_dom"
},
function(msg){
console.log("result message:",msg);
$.ajax({
type: "POST",
url: "http://localhost:3000",
data —JSON.stringify({
text —msg
}),
dataType: "json",
contentType: "application/json; charset=UTF-8",
crossDomain: true,
success:function(data){
console.log(data);
var popup=chrome.extension.getViews({type:"tab"});
if(popup.length>0){
popup[0].showResult(data);
}
}
})
});
});
});
popup.js
$( document).ready(function(){
$('#submit').click(function(){
console.log("cliecked");
chrome.runtime.sendMessage({
command: "get_text"
});
});
function showResult(data){
console.log(data);
console.log("received message");
}
});
First, in the title of this question,
I want to call popup.js function from background.js
That's true, but it's basically "Event page (=Background) calls to Popup page are not always possible."Popup page JavaScript Context is created when the Browser Action or Page Action button is pressed.In other words, popup.js is not loaded unless a pop-up is displayed.
However, if you look at the code above, it seems that popup.js to background.js, and then popup.js to background.js, so you can do this.There are several ways.
At first, the easiest way is to call the function defined in background.js directly.It looks like the following.
background.js
window.foo=(name)=>{
return "Hello, "+name;
};
popup.js
chrome.runtime.getBackgroundPage(function(bg){
let msg = bg.foo("Yoichiro");
// Something...
});
If you would like to give a callback function to be called asynchronously later instead of returning it immediately, you can do the following:
background.js
window.foo=(name, callback)=>{
callback("Hello,"+name);
};
popup.js
chrome.runtime.getBackgroundPage(function(bg){
bg.foo("Yoichiro", (msg) =>{
// Something...
});
});
Now you can return the results of the background.js side to popup.js side.
Another method is to use chrome.runtime.sendMesasge().It is used in the code you provided, and I believe that the message from popup.js to background.js was successful.Now, how do I return the results from background.js to popup.js, but use the third argument ssendResponse を in the callback function of the onMessage event as follows:
background.js
chrome.runtime.onMessage.addListener(
(msg, sender, sendResponse) = > {
sendResponse("Hello," + msg.name);
}
);
popup.js
chrome.runtime.sendMessage({
name: "Yoichiro"
}, (msg) = > {
// Something...
});
In other words, the value passed to the sendResponse() function is converted to the callback function call passed to the sendMessage(), and the value passed by the background.js side is obtained as an argument.
567 Who developed the "avformat-59.dll" that comes with FFmpeg?
878 When building Fast API+Uvicorn environment with PyInstaller, console=False results in an error
572 Understanding How to Configure Google API Key
595 GDB gets version error when attempting to debug with the Presense SDK (IDE)
566 rails db:create error: Could not find mysql2-0.5.4 in any of the sources
© 2024 OneMinuteCode. All rights reserved.