如果网站通过 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 = htmlContentconsole.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.')
})