我正在开发Chrome扩展程序。我有一个内容脚本需要注入页面。这是内容脚本,它实际上从事件页面接收消息并将其注入网站然后执行搜索;
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse){
$('[name="q"]').val(msg.searchword);
$('.btn.btn-success').click();
});
我的活动页面很长,所以我试图给出相关部分。我的活动页面中有一个功能;
function applySearch(search_text) {
使用tabs.query对选项卡进行功能查询。然后在查询的回调中,有一个用于编程注入的大的switch-case语句。这是相关的部分;
case "https://bayi.saroto.com/?p=1", "https://bayi.saroto.com/?p=15":
console.log("Saroto case içi");
chrome.tabs.executeScript(tabs[i].id,{"file": "jquery-1.11.3.js", runAt:"document_start" ,allFrames:true}, scriptInCallback(tabs[i].id, "con_saroto_search.js", search_text));
scriptInCallback和messageInCallback函数:
function messageInCallback(tabid, searcher){
chrome.tabs.sendMessage(tabid, {searchword: searcher});
}
function scriptInCallback(tabid, scriptname, search_text){
chrome.tabs.executeScript(tabid, {"file": scriptname , allFrames: true},
messageInCallback(tabid, search_text));
这是我的popup.js:
function hello() {
chrome.runtime.getBackgroundPage(function(page){
page.applySearch(document.getElementById('aramaKeyword').value);
});
}
document.getElementById('clickme').addEventListener('click', hello);
显然我的popup.html中有一个文本框和一个按钮
问题是,当我打开弹出窗口并键入搜索词并单击按钮时,即使已经注入了内容脚本(可以从页面的开发人员控制台看到),它也不起作用。它仅在我再次打开弹出窗口时有效,键入关键字并再次单击该按钮。
因此;内容脚本最初不起作用。它在第二个工作。