获取iframe内的所有链接并添加_blank目标属性

3

在iframe页面中,是否可以检索到所有href元素?

也就是说,我有一个页面,它嵌入了来自不同站点的页面。在iframe中显示的内容包含许多链接(href标签)。

是否可以将所有链接内的TARGET属性添加为BLANK?由于链接深埋在许多嵌套的表格和div中,因此我需要能够递归地在其中添加属性。

编辑:添加截图以显示需要删除的额外字符:

enter image description here

4个回答

5
如果iframe的src与所在域相同,您可以通过使用document.getElementById("frameID").document轻松访问它并操作它。
如果它来自不同的域,您可以考虑将iframe链接到您自己域中的脚本,并使该脚本从远程域下载数据并输出 :)。
myHTMLpage.html
<html>
    <head>
    <title></title>
        <script src="jquery-1.7.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#ifr").load(function () {
                var ifr = document.getElementById("ifr")
                var anchors = ifr.contentDocument.getElementsByTagName("a");
                for (var i in anchors) {
                    anchors[i].setAttribute("target", "_blank");
                }
            });
        });
    </script>
    </head>
    <body>
        <iframe src="myOwnSite.aspx" width="900px" height="600px" id="ifr" ></iframe>
    </body>
</html>

myOwnSite.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyOwnSite.aspx.cs" Inherits="MyOwnSite" %>

myOwnSite.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;


public partial class MyOwnSite : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Response.Write(new WebClient().DownloadString("http://theExternalSiteHere.com"));
        }
    }
}

它位于不同的域名上。您能详细说明一下如何将iframe链接到我域名上的脚本,以便我可以下载数据并打印吗?我还没有完全理解。谢谢。 - obautista
1
您有一个包含iframe的页面。iframe的src属性指向您自己网站上的php或asp脚本。该脚本将下载应在iframe中的页面并将其回显/响应输出。现在,您拥有了正确的HTML,位于您自己的域名下。我正在使用手机,无法提供代码示例。但如果还是不清楚,我可以在半小时内为您提供样例 :) - f2lollpll
1
现在尝试更新后的HTML页面吧。之前有一些错误。我已经在Chrome 16.0.9中测试过了,它可以正常工作!出于好奇,我在这个页面上进行了测试:http://msdn.microsoft.com/en-us/library/ff818516(v=vs.85).aspx - f2lollpll
那个完美地运作了。非常感谢!还有一件事——由于某种原因,我在我的 iframe 中看到了一堆 Â 字符。使用建议的解决方案,我该如何隐藏这些字符或将它们替换为空字符串? - obautista
1
看起来是编码问题。尝试阅读有关HTML字符编码的内容 :) - f2lollpll
显示剩余2条评论

2
不可能,如果iframe中的站点不属于您的域名,根据您的描述,似乎是这种情况。

2
尝试在 iframe 的 head 标签中添加 <base target="_blank">

1

以下是对我有效的方法:

var anchors= document.getElementById(id).contentWindow.document.getElementsByTagName("a"); for (var i in anchors) { anchors[i].target = "_blank"; //.setAttribute("target", "_blank"); }

我使用的是IE8。IE6和IE7的脚本可能不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接