2011-09-08 76 views
1

上我正在写一个脚本,应该重写网页上的所有链接从http://到https:// - 它必须做的客户端,它运行在一个页面我不控制。改写用JavaScript链接动态页面

执行环境:只有新版Chrome,因为这是一款Chrome扩展的注入脚本,所以没有跨浏览器的后顾之忧。注入发生在document_start(即在DOM开始加载之前)。

我的第一次尝试是监视DOMContentLoaded,然后遍历document.links:

document.addEventListener("DOMContentLoaded", rewriteHTTPS, false); 

function rewriteHTTPS() { 
    var links = document.links; 
    for(var i in links){ 
     links[i].href = links[i].href.replace(/http:/, "https:"); 
    } 
} 

不幸的是,我意识到,页面是动态的,所以更多的链接后,该事件被触发加。

所以,问题是:什么是捕捉动态DOM页面中的所有新的和修改链接的最佳方式?

+0

有没有*真的*很好的理由,为什么这不是在服务器端完成?如果你的用户只是关闭Javascript会怎么样? –

+0

我正在编写浏览器扩展程序以与外国网站进行交互。很明显,如果我的用户使用它,他们已经启用了javascript。 – Xan

+0

啊,有道理:) –

回答

0

您可能想要考虑倾听DOMNodeInserted事件,甚至认为它在IE中的支持似乎很差。该问题的其他答案也可能有所帮助。

+1

IE不是问题;这是一个只有Chrome的问题,它说明了这一点。至于DOMNodeInserted:它并没有为所有新的DOM节点触发,它似乎是每次插入子树时触发一次。看起来像我必须遍历每个这样的子树。 – Xan

+0

是的,迭代'event.target.getElementsByTagName('a')'为'DOMNodeInserted'对我来说是诀窍。谢谢。 – Xan

+0

啊,对不起,我错过了“仅限Chrome”的部分。很高兴它的作品。 –