Javascript Chrome扩展-无法使用Chorme*.API启动外部网站
我正在学习如何创建Chrome扩展。我刚刚开始开发一个用于启动亚马逊网站并在其上执行搜索活动的应用程序。我使用了内容脚本。但我的代码在第一次警报后不起作用。请在下面找到我的代码: >manifest.json:清单文件Javascript Chrome扩展-无法使用Chorme*.API启动外部网站,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在学习如何创建Chrome扩展。我刚刚开始开发一个用于启动亚马逊网站并在其上执行搜索活动的应用程序。我使用了内容脚本。但我的代码在第一次警报后不起作用。请在下面找到我的代码: >manifest.json:清单文件 { “名称”:“TestChrome扩展”, “版本”:“0.0.1”, “清单版本”:2, “背景”:{ “脚本”:[“popup.js”] }, “权限”:[ “标签”, "" ], “内容脚本”:[ { “匹配项”:[ "" ], “js”:[“contentscript
{
“名称”:“TestChrome扩展”,
“版本”:“0.0.1”,
“清单版本”:2,
“背景”:{
“脚本”:[“popup.js”]
},
“权限”:[
“标签”,
""
],
“内容脚本”:[
{
“匹配项”:[
""
],
“js”:[“contentscript.js”]
//“运行时间”:“文档结束”
}
],
“浏览器操作”:{
//“默认弹出窗口”:“popup.html”,
“默认图标”:“icon.png”,
“默认标题”:“这是扩展的工具提示”
}
}
>popup.js:使用getElementbyId方法的弹出文件/背景脚本
//当用户单击浏览器操作时调用。
chrome.browserAction.onClicked.addListener(函数(选项卡){
//向活动选项卡发送消息
警报(“已识别”);
chrome.tabs.query({active:true,currentWindow:true},函数(tabs){
var activeTab=tabs[0];
log(“main.js的URL”,activeTab);
sendMessage(activeTab.id,{“message”:“clicked_browser_action”});
});
});
chrome.runtime.onMessage.addListener(
功能(请求、发送方、发送响应){
如果(request.message==“打开新选项卡”){
create({“url”:request.url});
document.getElementById(“twotabsearchtextbox”).textContent=“Iphone 7”;
document.getElementsByClassName(“导航输入”).addEventListener(“单击”,函数)(){
警告(“你点击了我”);
});
}
}
);
executeScript(null,{file:“contentscript.js”,allFrames:true});
>contentscript.js:下面是我的内容脚本的代码
chrome.runtime.onMessage.addListener(
功能(请求、发送方、发送响应){
如果(request.message==“单击了浏览器\操作”){
警报(“内容脚本:我正在运行!”);
//var firstHref=$([a[href^='http']).eq(0).attr(“href”);
var firstHref=”http://www.amazon.in";
//console.log(firstHref);
chrome.runtime.sendMessage({“message”:“open_new_tab”,“url”:firstHref});
}
}
);
我已经按照建议修改了我的脚本。请参阅上面的代码。不要使用警报,它可能会使弹出窗口自动关闭,这意味着其代码停止运行。使用console.log并正确调试代码:右键单击弹出窗口,选择
Inspect
,转到源代码,设置断点,逐步检查代码,检查值。谢谢。弹出窗口不是自动关闭的。我必须手动关闭弹出窗口。我确实调试了代码,但我的代码没有进入这一行:chrome.tabs.query({active:true,currentWindow:true},function(tabs)在这种情况下,请在回调内设置断点。它返回UndefinedM很可能意味着内容脚本未插入,这发生在扩展安装或重新加载之后。在这种情况下,当请求
为未定义
时,您需要使用chrome.tabs.executeScript和在其回调中重新发送消息。
<!-- language: lang-json -->
{
"name": "TestChrome Extension",
"version": "0.0.1",
"manifest_version": 2,
"background": {
"scripts": ["popup.js"]
},
"permissions": [
"tabs",
"<all_urls>"
],
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [ "contentscript.js" ]
//"run_at": "document_end"
}
],
"browser_action": {
//"default_popup": "popup.html",
"default_icon": "icon.png",
"default_title": "That's the tool tip of extension"
}
}
<!-- language: lang-javascript -->
// Called when the user clicks on the browser action.
chrome.browserAction.onClicked.addListener(function (tab) {
// Send a message to the active tab
alert("Clicked Recognised");
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
var activeTab = tabs[0];
console.log("URL from main.js", activeTab);
chrome.tabs.sendMessage(activeTab.id, { "message": "clicked_browser_action" });
});
});
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.message === "open_new_tab") {
chrome.tabs.create({ "url": request.url });
document.getElementById("twotabsearchtextbox").textContent = "Iphone 7";
document.getElementsByClassName("nav-input").addEventListener("click", function () {
window.alert("You Clicked Me");
});
}
}
);
chrome.tabs.executeScript(null, { file: "contentscript.js", allFrames: true });
<!-- language: lang-javascript -->
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.message === "clicked_browser_action") {
alert("CONTENT SCRIPT: I am running!");
// var firstHref = $("a[href^='http']").eq(0).attr("href");
var firstHref = "http://www.amazon.in";
//console.log(firstHref);
chrome.runtime.sendMessage({ "message": "open_new_tab", "url": firstHref });
}
}
);