1

我必须扫描 HTML 以查找远程内容(Iframe 标签、Img 标签、脚本标签等),并根据某些黑名单删除其中存在的链接。我能够删除 src 指向黑名单 URL 的 iframe 、img 、脚本标签。

var mySpan = document.createElement(\"span\");
 mySpan.innerHTML = \"\";
 var block = p[key];
 var re = new RegExp(block);
 a = document.getElementsByTagName('iframe');
 for(i=0;i<a.length;i++)
 {
    var str = a.item(i).src;
    if(str.match(re))
     {

          a[i].parentNode.replaceChild(mySpan, a[i]);
        // + "a.item(i).src = '';
    }
 }

对于 script 和 img 标签也是如此。但是可以有更多这样的标签。我可以有一个通用的解决方案来遍历 HTML 中的所有标签并查找/替换被列入黑名单的链接吗?我对 Javascript 非常陌生,所以它的基础知识有点薄弱。这个解决方案可以在我的情况下工作吗?我不想使用 JQuery 等库,因为我在 Android 上这样做。

4

2 回答 2

2

不要在 HTML 上使用任何正则表达式 - 使用 DOM。

  1. 查看 HTML 标准以获取可包含外部链接的标签的属性列表。
  2. 循环从document.getElementsByTagName(tagname).
  3. .getAttribute根据黑名单检查属性并使用and进行清理.removeAttribte(奖励:您将拥有标准化的数据,无需担心人们试图通过时髦的转义偷偷溜走!)。
  4. 其中许多属性将被称为src,因此您可能希望"*"使用此属性循环标记名称,以防万一/偏执。或者只是遍历所有元素的所有属性。虽然这会很慢,但仍然不能保证有人不会避免使用难以与纯文本区分的 URL(如 IP 或没有协议的域名),因此我建议不要进行全面扫描。
于 2012-08-03T10:03:28.043 回答
2

获取文档中的所有元素document.getElementsByTagName('*')

一旦你这样做了,使用你认为适合的代码来检查每个元素是否符合你的条件。

这将确保您已经检查了所有内容,如果您使用的是 jQuery,我可以让思考变得更简单。

但是非常尊重作为一个纯粹的 JavaScripter !

于 2012-08-03T08:10:08.477 回答