更改HTML中任何位置的绝对URL

3

我有一个带有常规标签的HTML,看起来类似于:

<html>
   <head> ... </head>

   <body> 

        ...some html....

        <script>
           window.siteRoot = "https://example.com"
        </script>

   </body>
</html>

现在,在这个HTML中,我想将所有绝对URL替换为example.com作为域名,并将路径改为/。我该如何做?
我知道我可以通过获取锚点标记的href并更改它们的href来更改锚点标记的href,但是在这里,我想超越锚点标记,并查找和替换绝对URL,这些URL可能出现在上面的script标记中。我该怎么做?

你能离线完成吗? - Mr.
先生,您想在页面渲染或已经渲染时在浏览器上执行此操作。 - Amanda
@Mr. 如果我想离线执行,这个方法会有什么不同? - Amanda
如果您可以离线处理文件,则可以利用sed - Mr.
2个回答

0

这里可以使用html元素base

在这个例子中,我快速添加了一些内联javascript,仅供演示:onmouseover="console.log(this.src)",这样我们就可以在鼠标悬停时检查url。

但是,这仅仅是纯html。它将应用于文档中的所有相对url。如果您需要避免特定元素的影响,则传入完整的url(<img src="https://otherdomain.com/..."

您将看到img的src url变为https://example.com/img.jpg

<html>
   <head> 
     <base href="https://example.com">
   </head>
   <body> 
        ...some html....
        
        <img src="img.jpg" onmouseover="console.log(this.src)">
       
         <br>
        
        <img src="https://otherdomain.com/remote.png" onmouseover="console.log(this.src)">

   </body>
</html>

请注意,这可能会导致脚本等方面的异常情况,当变得复杂时使用起来通常有些困难。

-1
如果我正确理解了你的问题,你可以循环遍历DOM,并使用indexOf()搜索每个元素的URL,然后进行更改。在循环中使用getElementsByTagName(),或者对于每个元素都检查url是否包含indexOf(),并包含if语句 - 如果indexOf() > -1,则重新分配url为新的URL。

1
这对于我在问题中提到的例子将如何运作? - Amanda
var all = document.getElementsByTagName("*");for (var i=0, max=all.length; i < max; i++) { all[i].//填写你要查找的内容 -innerText、innerHTML、属性等。 } - Simcha
在代码块中添加一个if语句 - 如果(all [i] .innerText,etc.indexOf('你要查找的任何URL')> -1){all [i] .innerText = newUrl}。 - Simcha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接