如何检查 iframe 中的锚标记是否包含 URL

How to check whether anchor tags within an iframe contain a URL

本文关键字:是否 URL 包含 何检查 检查 iframe      更新时间:2023-09-26

我正在处理一个通过CGI系统动态生成的页面,该网站的真正开发人员没有时间为我更改python代码。也就是说,我被迫构建页面(同一域)并使用一些 JavaScript 来修改其内容......现在,我正在尝试查找包含 URL 的锚标签并将目标属性设置为"_top"。这样,页面上打开菜单等的锚点将加载到框架内,并且指向异地的任何内容都将加载到整个窗口中。这是我尝试过的:

function pointOutside(){
    var anchorS = window.frames[0].document.getElementsByTagName("a");
    for(i=0;i<anchorS.length;i++){
        var foo = anchorS[i].getAttribute('href');
        foo = foo.toString();
        if(foo.search(/http/i) != -1){
            anchorS[i].setAttribute('target','_top');
        };
    };
};
setTimeout("pointOutside()",2000);

超时为帧的内容提供了足够的时间来加载,然后再调用它,但是我遇到麻烦的地方是检查href属性是否以" http"开头。我最初尝试在没有"foo = foo.toString();"行的情况下这样做,但收到错误,如"未捕获的类型错误:无法在 null 上调用方法'搜索'"。我心想,"啊哈,我会确保它是一根绳子!"但没有运气。现在当我调用 toString()..."未捕获的类型错误:无法调用 null 的 methor 'toString'。"

奇怪的是,为了确保我的选择器正常工作,我使用了"alert(foo)",并且能够为每个锚标记获取一个弹出窗口,显示 href 属性的值。

不知道我在这里出了什么问题。任何帮助将不胜感激。

首先,如果你在该浏览器窗口中有任何可用的javascript框架,请使用DOMReady函数(如jQuery的.ready http://api.jquery.com/ready/)来利用它们

此外,您需要考虑返回不同值的 .href 和 .getAttribute('href')。 例如,在 Chrome 中,.href 返回您点击链接后将导航到的网址。 但是,.getAttribute('href')返回锚标记中的实际内容,这可能是一个相对URL。

最后,您出现异常的原因是页面上可能有一些锚点没有 href,并且纯粹是出于结构目的。 对于这些元素,您可以在尝试使用 .toString() 之前插入一行,如下所示:

if (typeof foo !== "string") { continue; }
如果 for 链接

上未设置 href,则 continue 语句会导致 for 循环忽略该链接并继续执行循环的下一次迭代。