如何禁用Chrome打开"新窗口"和"标签"?

时间:2013-12-16 08:20:17

标签: google-chrome google-chrome-extension window settings browser-support

他们是否可以通过Chromes浏览器设置在一个窗口中保留互联网上的所有页面?或者我可以使用插件/插件吗?

当我点击某些链接时,我不希望在新标签页和/或新窗口中打开网页。

如果有人有任何建议,请告诉我!,谢谢!!

        <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>

1 个答案:

答案 0 :(得分:7)

可能的方法:

一种方法是构建一个扩展,在每个页面中注入 content script 。此内容脚本将解析DOM并从锚元素中删除所有target属性,并将锚元素的所有target属性设置为_self

注意事项:

  1. 在许多页面上都有动态插入的元素(包括锚元素)。
  2. 某些页面上有动态变化的元素(包括锚元素)。
  3. 并非所有页面/标签都是通过链接打开的(例如某些页面可以使用 window.open() )。
  4. 解决方案:

    您可以使用 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
    });