web-dev-qa-db-ja.com

現在のタブにフォーカスを置いたまま、新しいタブをバックグラウンドで開きます-Chrome

JavaScriptでCtrlキーを押しながらChrome(v68)の最新バージョンで動作するリンクをクリックする方法は?

コンテキスト-特定のタブを1日の特定の時間に開く(数分後に閉じる)JavaScriptスクリプトを実行しています。私が使用している現在のタブにフォーカスを置いたまま、バックグラウンドでタブを開くようにしようとしています。

プログラムで開かれたタブは、最小化された場合でもポップアップするためにChromeを導き、非常に混乱します。

これらの 古いソリューション Stack Overflowで私がここで見つけたのは、Chromeの最新バージョンでは動作しません。

手動でCtrlキーを押しながらリンクをクリックすると、目的の効果が得られます(タブはバックグラウンドで開きます)。 Chromeの最新バージョンでこれをプログラムで実現できますか?


次のコードは、Chromeの最新バージョンでは動作しません。

_const openNewBackgroundTab = (url) => {
  const anchor = document.createElement("a");
  anchor.href = url;
  document.body.appendChild(anchor);
  const evt = document.createEvent("MouseEvents");    
  // the tenth parameter of initMouseEvent sets ctrl key
  evt.initMouseEvent(
    "click", true, true, window, 0, 0, 0, 0, 0,
    true, false, false, false, 0, null
  );
  anchor.dispatchEvent(evt);
}
openNewBackgroundTab('https://stackoverflow.com');
_

..新しいタブが引き続きフォーカスされます。


再現するステップ:

  • ウィンドウ1を開き、コンソールで次を実行します。

let winStacko; setTimeout(() => { winStacko = open('https://www.stackoverflow.com'); }, 30 * 1000); setTimeout(() => winStacko.close(), 2 * 60 * 1000);

  • スクリプト実行後30秒以内にウィンドウ2を開きます

望ましい動作:

  • 背景タブが開いてから閉じている間、ウィンドウ2がずっとフォーカスされています。
17
Ga Sacchi

これを個人的に使用したい場合、および拡張機能を使用してもかまわない場合は、独自の拡張機能を作成できます。

chrome拡張機能を作成して必要な動作を実現するのは、実際には非常に簡単です。拡張機能からタブを開閉する方法を知っているだけです。次のページで [ 〜#〜] api [〜#〜]

以下に例を示します。

1-manifest.jsonファイルを作成し、tabsパーミッションを要求します

{
  "name": "blabla",
  "version": "0.1",
  "permissions": ["tabs"],
  "background": {
    "persistent": false,
    "scripts": ["background.js"]
  },
  "browser_action": {
    "default_title": "Open a background tab every x time"
  },
  "manifest_version": 2
}

2-同じフォルダーにbackground.jsスクリプトを作成します

const INTERVAL = 5000;
setTimeout(function(){
    chrome.tabs.create({url: "https://www.stackoverflow.com", active: false }, tab =>{
        setTimeout(function(){
            chrome.tabs.remove(tab.id);
        },INTERVAL);
    }); 
},INTERVAL);

ここからもダウンロードできます

注:ここでactiveパラメーターに注意してください。これは、タブがウィンドウ内のアクティブなタブになるかどうかを定義します。ウィンドウがフォーカスされているかどうかには影響しません

3-chromeの拡張機能を使用します

  1. ダウンロードリンクを使用している場合は、アーカイブを解凍します
  2. chromeメニューから拡張機能に移動します
  3. 右上隅で開発者モードを有効にします
  4. Load Unpackedボタンをクリックして、拡張機能フォルダーを選択します
  5. 拡張機能は自動的に実行されます
4

昔は、次のようなものを使用してこれを行うことができました。

if(window.focus == false)
{
    this.focus();
}


悪用者のため、追加のプラグインを使用する必要があります。
解決策:ウィンドウのロールオーバー:
解決策は、別のページを作成することです。リンクをクリックすると、ウィンドウが閉じ、閉じたばかりのウィンドウを開くページに切り替わり、その場所を新しいページに変更します。
ページ1コード:

document.getElementById("myId").onclick = function(){window.open("page2.html");window.close()}

ページ2コード:

window.open("previouspage.html");
window.location = "newpage.html";
//close the page
window.close();

私はこの戦略を呼んでいます"Window Rollover。"

3
bluninja1234

I[〜#〜] partialally [〜#〜]Chromeプラグイン:Force Background Tab

https://chrome.google.com/webstore/detail/force-background-tab/gidlfommnbibbmegmgajdbikelkdcmcl/related?hl=en

そのアドオンを使用すると、タブはフォーカスなしでバックグラウンドで開きます。唯一の問題は、ウィンドウの最後に使用されたタブ(新しいタブを起動するタブとは異なる場合があります)が、使用中の他のアプリケーションの前にポップアップすることです。

2
Ga Sacchi

新しいタブで同じURLを開き、現在のタブのlocation.hrefを目的の新しいURLに変更するようなポップを試すことができます。

window.open(window.location.href);
window.location.href = 'http://www.google.com';
1
TiagoMagalhaes