2011-09-24 200 views
-1

我试图编写一个全局JavaScript函数,它在页面加载之前覆盖任何HTML对象(imgiframe,链接等)。 Overiding操作的目的是将这些对象的SRCHREF使用DOM更改为任何其他链接。在对象完成加载之前,在JavaScript中触发事件

不幸的是,我没有找到任何解决方案,没有首先加载的对象,只有然后改变它onload事件。

我的第二个选择是通过将这些属性与正则表达式匹配并替换结果值来更改SRCHREF。我宁愿不这样做,因为它速度很慢并且耗费大量时间。

如果有人能够分享他/她的经验并帮助我解决这个问题,我会很高兴。

+0

你为什么要用这个javascript? – rlemon

+0

我想用Javascript做它,因为它将被嵌入到我没有写入的外部页面中。 Bakudan - 没关系,如果你不想帮忙。 –

+0

@Niv Sela你的问题在于这个概念,这里的每个答案都是对我DELETED评论的一个很好的重写。你仍然无法操纵那些不存在的东西 - DOM应该被加载来操纵它!所以你想要的是不可能的。 – Bakudan

回答

0

JavaScript只适用于DOM。

然而,您可以通过AJAX加载页面,获取内容并对其进行任何字符串操作。

+0

嘿,谢谢你的评论! 问题是,我想要在通过代理下载的外部页面中嵌入脚本。 我可以遍历所有链接并做我想做的任何事情,但我正在寻找更方便的东西,不需要任何特殊的威胁或解析能力。 –

0

如果您尝试修改页面的静态HTML中存在的项目,则只有在浏览器成功加载它们之前,才能使用javascript对其进行修改。在此之前无法修改它们。在您有机会修改它们之前,它们可能会或可能不会被观众看到。

要解决此问题,有几个选项。

  1. 在导致要修改所有项目的页面中加入CSS样式规则最初被隐藏,那么你的JavaScript可以对其进行修改,然后告诉他们,使他们不会将您的修改之前看到。
  2. 请勿将要修改的项目放入HTML页面的静态部分。您可以使用javascript以编程方式创建它们,并将它们插入到页面中,或者可以通过ajax加载它们,然后在通过ajax加载它们之后进行修改,然后将它们插入到页面中。

对于这两种情况,如果未启用javascript,则必须制定后备计划。

+0

嘿,谢谢你的评论! 第一个选项可以工作,但我一直在寻找更多的逻辑,像覆盖“BeforeLoading”事件;) 我说的第二个选项不是不可能的,因为我不是第一个创建页面的人。 –

+0

没有“BeforeLoading”事件。浏览器不提供这种功能。部分原因是浏览器在页面加载过程中进行渐进显示。因此,没有单个时间点加载页面并且可以对其进行操作,但尚未显示。他们可以尝试通知您个别元素(加载时,但在显示之前),但他们不这样做会有些复杂。 – jfriend00

+0

是的,这就是为什么我把笑脸。根据我的研究,我没有发现任何类似的东西,这就是为什么我问专家;) 我知道我可以通过解析页面内容来做到这一点,但它很笨拙。如果你熟悉任何能够通过不使用100%正则表达式处理来改变链接的东西,那将是非常棒的:) 我写了下面的正则表达式(适合几乎90%的情况),但它的工作速度非常慢...([。\ | \]](https:\/\ /)?[^ \ /] +/*(“)。 $ domain_noend。“\。(com | co \ .il))?/?([^'\”<>] *)['| \“]?# –

相关问题