在对象完成加载之前在javascript中触发事件

在对象完成加载之前在javascript中触发事件,javascript,events,function,overriding,Javascript,Events,Function,Overriding,我试图编写一个全局JavaScriptfunction,在页面加载之前覆盖任何HTML对象(img、iframe、links等等)。覆盖操作的目的是使用DOM将这些对象的SRC和HREF更改为任何其他链接 不幸的是,如果不先加载对象,然后通过onload事件对其进行更改,我就没有找到任何解决方案 我的第二个选择是通过将这些属性与正则表达式匹配并替换结果值来更改SRC和HREF。我不喜欢这样做,因为这样做很慢,而且要耗费很多时间 如果有人能分享他/她的经验并帮助我解决这个问题,我会很高兴。Java

我试图编写一个全局JavaScriptfunction,在页面加载之前覆盖任何HTML对象(
img
iframe
、links等等)。覆盖操作的目的是使用DOM将这些对象的
SRC
HREF
更改为任何其他链接

不幸的是,如果不先加载对象,然后通过
onload
事件对其进行更改,我就没有找到任何解决方案

我的第二个选择是通过将这些属性与正则表达式匹配并替换结果值来更改
SRC
HREF
。我不喜欢这样做,因为这样做很慢,而且要耗费很多时间


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

JavaScript只在DOM中工作


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

如果您试图修改页面静态HTML中存在的项目,则在浏览器成功加载之前,无法使用javascript对其进行修改。在那之前没有办法修改它们。在您有机会修改它们之前,它们可能对查看者可见,也可能不可见

要解决这个问题,有两种选择

  • 在页面中放置CSS样式规则,该规则会使您要修改的所有项目最初隐藏,然后您的javascript可以修改它们,然后显示它们,以便在修改之前不会看到它们
  • 不要将要修改的项目放在HTML页面的静态部分。您可以使用javascript以编程方式创建它们并将它们插入页面,也可以通过ajax加载它们,在通过ajax加载之后修改它们,然后将它们插入页面

  • 对于这两种情况,如果没有启用javascript,您必须制定一个后备计划。

    为什么要使用javascript?我想使用javascript,因为它将嵌入到我尚未编写的外部页面中。巴库丹-如果你不想帮忙,没关系。@Niv Sela你的问题在概念上,这里的每个答案都是对我删除的评论的很好的重新表述。你仍然不能操作一些不存在的东西-应该加载DOM来操作它!所以你想要的是不可能的,这就是我想确定的。无论如何谢谢你!嘿,谢谢你的评论!第一个选项可以工作,但我正在寻找更具逻辑性的选项,比如重写“BeforeLoading”事件;)正如我所说的第二个选项是不可能的,因为我不是第一个创建页面的人。没有“BeforeLoading”事件。浏览器不提供这种功能。部分原因是浏览器在页面加载时会进行渐进式显示。因此,没有一个时间点可以加载页面并对其进行操作,但页面尚未显示。他们可以尝试在单个元素上通知你(加载时,但在显示之前),但他们不会,这样做会有点复杂。是的,这就是我为什么要放笑脸的原因。根据我的研究,我没有发现任何类似的东西,这就是为什么我来问专家;)我知道我可以通过篡改页面内容来做到这一点,但这是非常笨拙的。如果您熟悉任何可以通过不使用100%正则表达式处理来更改链接的内容,那就太好了:)我编写了以下正则表达式(适用于几乎90%的情况),但它的工作速度非常慢#[^\.](href | src)\s*=\s*['\\\'”]?(https?:\/\/)?[^\/]+/*(“$domain\u noend.”(com | co\.il))?/([^'\']*)['\\'”]?\35;有一个非常简单的解决方案:在html中使用Base标记。@NivSela-如果您只是试图更改域或根路径,而您的图像上一开始就没有域或根路径(你的问题中没有描述的东西),然后您可以使用
    标记。但是,如果您的图像/URL具有完全限定的URL,则
    标记不会影响它们。下次,请提供一个您尝试更改的HTML的实际示例,并在版本之前/之后显示,这样人们就可以知道真正可用的选项。嘿,谢谢您的评论!问题是我想要在通过代理下载的外部页面中嵌入脚本。我可以浏览所有链接并做任何我想做的事情,但我正在寻找更方便的,不需要任何特殊威胁或欺骗功能的东西。