无嵌入域名控制权时,如何让iframe内链接在新窗口/标签页打开?
解决iframe内链接点击报错并在新窗口打开的办法
因为你没法控制iframe里的网站域名,跨域限制导致没法直接修改里面的链接,给你个简单可行的方案,直接复制代码用就行:
步骤1:修改原有iframe代码
给原iframe添加一个id属性,方便后续代码定位它,修改后的代码如下:
<iframe id="rankings-iframe" src="https://theurl" width="100%" height="500" frameborder="0" scrolling="auto" allowtransparency="true"></iframe>
步骤2:添加一段JavaScript代码
把这段代码放在iframe代码的后面(或者网页的</body>标签之前):
const iframe = document.getElementById('rankings-iframe'); iframe.addEventListener('load', function() { try { // 尝试直接修改iframe内的所有链接 const iframeDoc = iframe.contentDocument || iframe.contentWindow.document; const links = iframeDoc.querySelectorAll('a'); links.forEach(link => { link.target = '_blank'; link.rel = 'noopener noreferrer'; // 安全属性,防止新页面影响原页面 }); } catch (e) { // 跨域无法直接访问时,拦截跳转并在新窗口打开 iframe.addEventListener('beforeunload', function(e) { const targetUrl = iframe.contentWindow.location.href; window.open(targetUrl, '_blank', 'noopener noreferrer'); e.preventDefault(); // 阻止iframe跳转,避免出现连接拒绝提示 }); } });
方案说明
- 如果浏览器允许跨域访问iframe内容(少数场景),代码会直接给所有链接加上
_blank属性,让它们默认在新标签页打开。 - 跨域无法直接操作iframe内容时,代码会监听iframe的跳转动作,一旦检测到要跳转,就直接在新窗口打开目标链接,同时阻止原iframe的跳转,彻底避免连接拒绝的错误。
内容的提问来源于stack exchange,提问作者garyh
相关产品推荐
相关产品推荐

