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

One*_*ezy 9 settings google-chrome window google-chrome-extension 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>
Run Code Online (Sandbox Code Playgroud)

gka*_*pak 7

可能的方法:

一种方法是构建一个扩展,在每个页面中注入一个内容脚本.此内容脚本将解析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
    }]
}
Run Code Online (Sandbox Code Playgroud)

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
});
Run Code Online (Sandbox Code Playgroud)

  • 你是否愿意使用扩展程序来解决这个问题.答案是你可以,我也给了你一些实现这一目标的示例代码.(我稍微修改了代码,以确保链接在iframe中打开(如果有的话).)我真的不明白你的意见.请尝试上面提出的解决方案并报告您是否遇到任何问题.(至少对我来说,它适用于iframe和外部的链接.) (2认同)