web-dev-qa-db-ja.com

chrome「新しいウィンドウ」と「タブ」を開かないようにする方法は?

Chromeのブラウザ設定を使用して、インターネット上のすべてのページを1つのウィンドウに保持する方法はありますか?または私がこれを行うことができるアドオン/プラグイン?

一部のリンクをクリックしたときに、新しいタブや新しいウィンドウでWebページが開かないようにします。

誰か提案があれば教えてください!、ありがとう!!

        <a href="http://www.bing.com" target="_blank">Opens a New Tab!</a>

        <i>Thtats not what i want..., I want this link to stay in same url bar.</i>

        <p>Like this!</p>
        <a class="click" href="http://www.bing.com">Click Here</a>
8
Oneezy

可能なアプローチ:

1つのアプローチは、すべてのページにコンテンツスクリプトを挿入する拡張機能を構築することです。このコンテンツスクリプトはDOMを解析し、 アンカー要素からすべてのtarget属性を削除しますアンカー要素のすべてのtarget属性を__self_に設定します。

警告:

  1. 多くのページに動的に挿入される要素(アンカー要素を含む)があります。
  2. 一部のページには、動的に変化する要素(アンカー要素を含む)があります。
  3. すべてのページ/タブがリンクを介して開かれるわけではありません(たとえば、一部のページではwindow.open()を使用できます)。

解決:

MutationObserverを使用して、アンカー要素が挿入されているか、target属性が変更されているかを監視して作成できます。適切な調整。

それがあなたにとって非常に重要である場合、あなたはまだ他の手段(例えばwindow.open())によって開かれたタブの世話をする必要があります(しかしそれらのケースは非常に少ないはずなので、トラブルの価値がないかもしれません)。

サンプルコード:

manifest.json:

_{
    "manifest_version": 2,

    "name":    "Test Extension",
    "version": "0.0",

    "content_scripts": [{
        "matches":    ["*://*/*"],
        "js":         ["content.js"],
        "run_at":     "document_start",
        "all_frames": true
    }]
}
_

content.js:

_/* Define helper functions */
var processAnchor = function(a) {
    //if (a.hasAttribute('target')) {
    //    a.removeAttribute('target');
    //}
    a.setAttribute('target', '_self');
};

/* Define the observer for watching over inserted elements */
var insertedObserver = new MutationObserver(function(mutations) {
    mutations.forEach(function(m) {
        var inserted = [].slice.call(m.addedNodes);
        while (inserted.length > 0) {
            var elem = inserted.shift();
            [].slice.call(elem.children || []).forEach(function(el) {
                inserted.Push(el);
            });
            if (elem.nodeName === 'A') {
                processAnchor(elem);
            }
        }
    });
});

/* Define the observer for watching over
 * modified attributes of anchor elements */
var modifiedObserver = new MutationObserver(function(mutations) {
    mutations.forEach(function(m) {
        if ((m.type === 'attributes') && (m.target.nodeName === 'A')) {
            processAnchor(m.target);
        }
    });
});

/* Start observing */
insertedObserver.observe(document.documentElement, {
    childList: true,
    subtree: true
});
modifiedObserver.observe(document.documentElement, {
    attributes: true,
    substree: true
});
_
7
gkalpak