有的网站是通过js控制页面新打开一个tab页的,但是我想通过注入js脚本修改为在当前页面打开

170 阅读2分钟

如果网站通过 JavaScript 控制在新标签页中打开页面(例如使用 window.open()),你可以通过注入脚本来修改其行为,使其在当前页面打开。

解决方案

你可以通过覆盖 window.open 函数来强制将所有新页面在当前窗口中打开。以下是一个基本的示例代码,它通过替换 window.open 函数,确保所有的页面都在当前页面加载,而不是新标签页。

1. 注入脚本覆盖 window.open

document.addEventListener("DOMContentLoaded", () => {
  // 保存原始的 window.open 函数
  const originalWindowOpen = window.open;

  // 重写 window.open,强制其在当前页面打开
  window.open = function (url, target, features) {
    // 将 target 替换为 '_self'(当前页面)
    return originalWindowOpen.call(window, url, '_self', features);
  };

  console.log('window.open has been overridden to open in the current page.');
});

2. 说明

  • 覆盖 window.open:通过重写 window.open,你可以强制所有调用 window.open 的地方都在当前页面中打开,而不是新标签页。只需将 target 参数强制设置为 _self
  • 注入脚本:通过在 Tauri 中注入这个脚本,你可以在页面加载完成后执行此修改,确保后续调用的 window.open 都在当前页面打开。
  • 兼容性:这种方法适用于大多数 JavaScript 使用 window.open 打开新页面的场景。

通过这种方式,你就能够控制页面如何响应 JavaScript 中的 window.open 调用,确保所有的页面都在当前标签页中加载。

如果想让所有的网站都通过在当前网页打开新的链接,就可以注入下面的脚本:

document.addEventListener('DOMContentLoaded', () => {
    // 获取页面的 HTML 内容
    let htmlContent = document.documentElement.innerHTML
    // 使用正则表达式替换所有 target="_blank" 为 target="_self"
    htmlContent = htmlContent.replace(/target="_blank"/g, 'target="_self"')
    // 将修改后的内容重新设置到页面
    document.documentElement.innerHTML = htmlContent
    console.log(
        'All target="_blank" attributes have been replaced with target="_self".'
    )
})

document.addEventListener('DOMContentLoaded', () => {
    // 保存原始的 window.open 函数
    const originalWindowOpen = window.open
    // 重写 window.open,强制其在当前页面打开
    window.open = function (url, target, features) {
        // 将 target 替换为 '_self'(当前页面)
        return originalWindowOpen.call(window, url, '_self', features)
    }
    console.log('window.open has been overridden to open in the current page.')
})