0

这个问题以前可能见过。但在我的情况下,我没有获得成功。我在 Iframe 中使用示例外部链接加载了本地 HTML 文件。

        <a href="http://www.boutell.com/">sample.com</a>

代码:

    <iframe id="iframe_Id" src="sample.html" 
style="background-color:white; height:100%; width:100%;" onload="Load()"; ></iframe>

    function Load() {
alert("loaded");
    var linkchange = document.getElementById("iframe_Id").contentWindow.location;
alert(linkchange);
}

单击外部链接时,我需要特定锚标记的 url 值。

编辑:我知道由于安全策略,当它是不同的域时我们无法获取 URL。但我需要来自本地 HTML 页面的值(我点击的链接 URL)。在这种情况下我没有尝试过

需要任何帮助。

4

2 回答 2

2

当您单击框架中的链接时,您可以调用父窗口中的函数。

在父 html 中,您需要添加一个函数来处理调用。就像是

function iframeLinkClicked(url) {
     //do stuff
}

然后在子窗口中添加一个函数来处理超链接的点击事件。

function linkClicked(hyperLink) {
    parent.iframeLinkClicked(hyperLink.href);
}

您需要将此添加到所有超链接

<a href="http://www.google.com" onclick="linkClicked(this);">google</a>

现在,当您单击一个链接时,它会提醒父窗口。

编辑:替代向每个超链接添加“onclick”。

如果框架 html 位于同一域中,则可以在加载框架时将事件添加到框架元素。

这是父页面中的完整脚本。

<script type="text/javascript">

    function iframeLinkClicked(url) {
        alert(url);
    }
    function Load(iframe) {
        iframe.onload = null;
        try {
            var a = document.frames['iframe_Id'].document.getElementsByTagName('a');
            for (var i = 0; i < a.length; i++) {
                a[i].onclick = function () {
                    parent.iframeLinkClicked(this.href);
                    return false;
                };
            }
        } catch (e) {

        }

    }
</script>

这将替换您当前的Load()功能。所以 iframe 仍然需要设置 load 属性。

没有什么可以添加到子页面了。一切都在这里完成。

<iframe id="iframe_Id" src="sample.html" 
style="background-color:white; height:100%; width:100%;" onload="Load(this);" ></iframe>
于 2013-11-05T13:29:46.997 回答
1

看看这个:

var a = document.frames['iframe_Id'].document.getElementsByTagName('a');

for(i=0; i<a.length; i++) { 
  a[i].onclick = function() { 
    document.getElementById("iframe_Id").src = this.href;
    // and so on whatever you want to do
  }
}
于 2013-11-05T13:29:22.727 回答