javascript - 如何阻止 iframed 页面中的外部超链接?

标签 javascript iframe hyperlink greasemonkey

我正在制作一个在 iframe 中显示另一个网站的网站(跨域)。问题是 iframe 中的站点有外部超链接,我想以某种方式阻止或禁用它们。我只想阻止外部超链接。

也就是说,如果 iframed 页面是 example.com/info :

  • block :<a href="http://other_example.net/pwn">Bad Link</a>
  • 允许:<a href="http://example.com/donate">Good Link</a>

我该怎么做? Greasemonkey 和某种脚本?还是别的?

最佳答案

用户脚本或浏览器扩展都可以做到这一点。 Greasemonkey 脚本将在页面上运行,无论它是否在 iframe 中(除非您告诉它不要这样做)。
要阻止外部链接,请将每个链接的 hostname 与 iframed 页面的 hostname 进行比较。

这是一个说明该过程的完整的 Greasemonkey 脚本:

// ==UserScript==
// @name     _Block cross-domain links
// @include  http://www.puppylinux.com/*
// @grant    GM_addStyle
// ==/UserScript==

//-- Only run if the page is inside a frame or iframe:
if (window.top !== window.self) {
    var linkList = document.querySelectorAll ("a");

    Array.prototype.forEach.call (linkList, function (link) {
        if (link.hostname !== location.hostname) {
            //-- Block the link
            link.href = "javascript:void(0)";
        }
    } );

    //-- Mark the links, so the user knows what's up.
    GM_addStyle ( "                             \
        a[href='javascript:void(0)'] {          \
            white-space: nowrap;                \
            cursor: default;                    \
        }                                       \
        a[href='javascript:void(0)']::after {   \
            background: orange;                 \
            content: 'X';                       \
            display: inline-block;              \
            margin-left: 0.3ex;                 \
            padding: 0 0.5ex;                   \
        }                                       \
    " );
}


您可以针对 this test page on jsFiddle 安装并运行该脚本.

注意:

关于javascript - 如何阻止 iframed 页面中的外部超链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27740714/

相关文章:

html - 表格中的菜单超链接在 Chrome 和 Firefox 中不起作用

api - Google Scripts 应用程序和 Plaid 链接身份验证

javascript - 如何检测客户端与 node.js 服务器的断开连接

javascript - 用js获取mp3文件频率数据

iframe - sencha touch::如何在 iFrame 内创建网站预览面板

javascript - 更改 iframe src 路径页面的背景

javascript - 隐藏从 iframe 加载的任何内容或元素

php - 解析 youtube 链接 PHP

javascript - 如何在 Javascript 对象中定义方法?

javascript - 如何创建包含 GUI 并控制父浏览器窗口的弹出浏览器窗口