chrome扩展:创建新标签并将焦点放在页面上

时间:2017-02-11 17:10:22

标签: javascript google-chrome-extension focus

尝试制作一个扩展程序,即创建新标签并将其导航到某个网站,然后让一些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(); }); 的页面工作得很好。

我尝试搜索谷歌资源,但无法找到任何解决方案,也不知道是否有办法将焦点放在页面上。

1 个答案:

答案 0 :(得分:0)

我提出了我的解决方案。想法很简单,当您尝试创建新的tab时,默认情况下selected属性为true。当你创建新的tab时,它会显示出来并且其地址栏会自动聚焦。然后你无法将焦点从bar偷到page

要防止关注地址栏,您可以创建具有此属性tab的新selected:false

chrome.tabs.create({selected: false},function(tab){
                        isTabOpen= true;
                        openedTab = tab.id;
                        tabCreated();
                    });   

创建标签后,您可以更新其linkselected属性,然后您可以通过注入的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()函数没问题。