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

时间:2015-01-02 10:31:49

标签: javascript iframe hyperlink greasemonkey

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

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

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

我该怎么做? Greasemonkey和某种脚本?或其他什么?

2 个答案:

答案 0 :(得分:1)

用户脚本或浏览器扩展程序都可以执行此操作。 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运行该脚本。

注意:

答案 1 :(得分:0)

为此,您必须使用Javascript函数比较您的网址href属性,如下所示

// this function will give host name
function get_hostname(url) {
    var m = url.match(/^http:\/\/[^/]+/);
    return m ? m[0] : null;
}

   var hostName =  get_hostname("http://example.com/path");

这将返回http://example.com/,如示例输出中所示。

使用上述功能,您可以比较您的网址以及是否使用您的主机名进行数学运算 - 然后您可以允许重定向网页,否则您可以显示外部链接的消息