尝试制作一个扩展程序,即创建新标签并将其导航到某个网站,然后让一些DateComponents
进行关注。
我检查了这个问题,但无法解决我的问题: How to steal focus from the omnibox in a Chrome extension on the new tab page?
这是一个示例代码,我正在尝试打开导航到Google并尝试关注Google搜索栏的新标签。
这是我的<input>
尝试抓住指定网页上的点击并指定content_script.js
并向我的<div>
发送消息
background.js
manifest.json
{
"manifest_version": 2,
"name": "E-Yaygın Kursiyer Aktarımı",
"description": "E-Yaygın Kursiyer Aktarımını Kolaylaştıran Yazılım",
"version": "1.0",
"permissions": ["tabs", "<all_urls>"],
"background": {
"scripts": ["background.js"]
},
"content_scripts": [{
"matches": [
"http://*/*",
"https://*/*"
],
"js": ["jquery.js","content_script.js"]
}],
"icons": {
"16": "images/icons/16.png",
"19": "images/icons/19.png",
"38": "images/icons/38.png",
"64": "images/icons/64.png",
"128": "images/icons/128.png"
}
}
content_script.js
$("#kybs_eklenti_edin_btn").hide();
$(document).ready(function (e) {
var host = $(location).attr('hostname');
var url = $(location).attr('pathname');
var search = $(location).attr('search');
console.log(url,"|",host,"|",search);
if (host.indexOf("kybs.com.tr")!=-1){
if (url == "/yoneticiv2/kursiyerlistesi"){
$("#tn_logo_holder").click(function(){
chrome.runtime.sendMessage({mesaj: "init_program"}, function(response) {
console.log(response);
});
});
}
}
});
background.js
var openedTab = 0;
var isTabOpen = false;
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.mesaj == "init_program"){
if (!isTabOpen){
chrome.tabs.create({selected: true},function(tab){
isTabOpen= true;
openedTab = tab.id;
tabCreated();
});
}else {
chrome.tabs.get(openedTab, function(tab) {
if (chrome.runtime.lastError) {
chrome.tabs.create({selected: true},function(tab){
isTabOpen= true;
openedTab = tab.id;
tabCreated();
});
}else {
tabCreated();
}
});
}
sendResponse("check");
}
});
function tabCreated(){
chrome.tabs.update(openedTab,{url:"https://google.com.tr"});
chrome.tabs.executeScript(openedTab, {file: "jquery.js"},function(tab){
if (chrome.runtime.lastError) {
console.log(chrome.runtime.lastError.message);
chrome.tabs.executeScript(openedTab, {file: "jquery.js"},function(tab){
chrome.tabs.executeScript(openedTab, {file: "inject.js"});
});
}else {
chrome.tabs.executeScript(openedTab, {file: "inject.js"});
}
});
}
inject.js
还包括一个JQuery库。
我正在尝试使用JQuery注入javascript,但它确实是完美的。一切正常,但无法将焦点从地址栏转移到网页。
第二件事,如果我点击新创建的页面,而试图加载$(document).ready(function(){
console.log("buradayız");
var kursNoInput = document.getElementById("lst-ib");
kursNoInput.value="840337";
kursNoInput.focus();
});
的页面工作得很好。
我尝试搜索谷歌资源,但无法找到任何解决方案,也不知道是否有办法将焦点放在页面上。
答案 0 :(得分:0)
我提出了我的解决方案。想法很简单,当您尝试创建新的tab
时,默认情况下selected
属性为true
。当你创建新的tab
时,它会显示出来并且其地址栏会自动聚焦。然后你无法将焦点从bar
偷到page
。
要防止关注地址栏,您可以创建具有此属性tab
的新selected:false
。
chrome.tabs.create({selected: false},function(tab){
isTabOpen= true;
openedTab = tab.id;
tabCreated();
});
创建标签后,您可以更新其link
和selected
属性,然后您可以通过注入的javascript从地址栏获取焦点。
function tabCreated(){
chrome.tabs.update(openedTab,{url:"https://google.com.tr"});
chrome.tabs.executeScript(openedTab, {file: "jquery.js"},function(tab){
if (chrome.runtime.lastError) {
console.log(chrome.runtime.lastError.message);
chrome.tabs.executeScript(openedTab, {file: "jquery.js"},function(tab){
chrome.tabs.executeScript(openedTab, {file: "inject.js"});
});
}else {
chrome.tabs.executeScript(openedTab, {file: "inject.js"});
}
});
chrome.tabs.update(openedTab,{selected:true});
}
比你的focus()
函数没问题。