2017-02-11 13 views
2

新しいタブを作成してそれをいくつかのサイトに移動してフォーカスを合わせるようにして、<input>にフォーカスを当てようとしています。クロム拡張子:新しいタブを作成し、ページにフォーカスを合わせる

私はこの質問をチェックしますが、私の問題を解決するカント: How to steal focus from the omnibox in a Chrome extension on the new tab page?

ここでは、私がGoogleに新しいタブを開こうとすると、Googleの検索バーに注力しようとしているサンプルコードです。

これは、指定したWebページ上でクリックをキャッチし、<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

にメッセージを送信するために私の content_script.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

$(document).ready(function(){ 
    console.log("buradayız"); 
    var kursNoInput = document.getElementById("lst-ib"); 
    kursNoInput.value="840337"; 
    kursNoInput.focus();   
}); 

ともjQueryライブラリが含まれています。

私はJQueryでjavascriptを注入しようとしていますが、それはmetterです。すべて正常に動作しますが、アドレスバーからウェブページにフォーカスを移動できません。

ロードしようとしているページが新しく作成されたページをクリックすると2番目のことfocus()は本当にうまく動作します。

私はGoogleリソースを検索しようとしますが、解決策を見つけることはできません。ページに注目する方法はありますか。

+0

トピックになる質問を編集してください:**完全な** [mcve]を含めると*問題が重複します*。 ** manifest.json **、背景/コンテンツ/ポップアップスクリプト/ HTMLの一部を含む。デバッグの助けを求める質問(「**なぜこのコードは動作しないのですか?**」)には、以下が含まれていなければなりません:►必要な動作、►特定の問題またはエラー*、および►問題を再現するのに必要な最短コード自体**。明確な問題文がない質問は、他の読者にとって有用ではありません。参照してください: "**どのように[mcve] **を作成するか"、[ここで私はどんな話題を聞くことができますか?](http://stackoverflow.com/help/on-topic)、[ask] – Makyen

+0

エクステンションをロードして実行するときに、[*拡張機能のさまざまな適切なコンソール](http://stackoverflow.com/a/38920982/3773011)に*正確に*表示されているものはありますか? – Makyen

+0

@wOxxOm私たちはそれについて何ができるのですか?なにか提案を? – Ahmet

答えて

0

私は私の解決策を思いついた。あなたが新しいtabを作成しようとすると、デフォルトでselected属性がtrueであるというアイデアは簡単です。新しいtabを作成すると表示され、そのアドレスバーが自動的にフォーカスされました。フォーカスをbarからpageに盗むことはできません。

アドレスバーにフォーカスしないようにするには、のような新しいtabを作成します。あなたはそのlinkselected属性を更新することができ、その後、あなたが注入されたJavaScriptでアドレスバーからフォーカスを取ることができるよりも、タブを作成した後

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

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()機能は問題なく動作します。

+0

これは、拡張機能が新しいタブをプログラム的に作成している場合にのみ機能しますが、ユーザーが新しいタブをクリックして新しいタブを作成すると、フォーカスを盗むことはできません。 – ospider

+0

@ospiderあなたはtabs.onCreateを聞いてそれを閉じて、それをプログラムで開くことができます。 –

+0

@KamranEyyubovはい、それは少し厄介なようです – ospider

関連する問題