使用jQuery重写HTML文件中的域(或IP地址)
我目前正在使用jQuery来使用jQuery重写HTML文件中的域(或IP地址),jquery,Jquery,我目前正在使用jQuery来加载()一个第三方HTML文件,并将其插入当前HTML页面的DIV中 $("#external-page").load(URL, function() { injectDataInPage(); doOtherStuffInPage(); }); 这很有效。主要的问题是,他们在HTML中添加了大量代码(即:发出服务器请求和从另一台服务器加载的资源的按钮等) 如果他们只为他们的请求使用了路径,那么这是可以的,但不幸的是,他们指定了域,有时还指定了IP地址
加载()
一个第三方HTML文件,并将其插入当前HTML页面的DIV中
$("#external-page").load(URL, function() {
injectDataInPage();
doOtherStuffInPage();
});
这很有效。主要的问题是,他们在HTML中添加了大量代码(即:发出服务器请求和从另一台服务器加载的资源的按钮等)
如果他们只为他们的请求使用了路径,那么这是可以的,但不幸的是,他们指定了域,有时还指定了IP地址
我想替换所有硬编码的域和IP地址,以指向我自己的服务器
例如:
<a href='http://external.com/some/path/of/service'>Click here</a>
<img src='http://10.2.3.4/some/path/to/image.png'>
将重新映射到:
<a href='http://my.domain.com/some/path/of/service'>Click here</a>
<img src='http://my.domain.com/some/path/to/image.png'>
我知道您可能可以使用IIS插件或Node.js或其他东西来完成这项工作,但是否可以使用jQuery在客户机上实际完成这项工作?在将页面添加到DOM之后,或者可能在将其注入到DIV之前。加载完成后插入它
$('a[href]').each(function(){
$(this).attr('href', $(this).attr('href').replace("http://external.com", "http://my.domain.com");
});
$('img[src]').each(function(){
$(this).attr('src', $(this).attr('src').replace("http://10.2.3.4", "http://my.domain.com");
});
您可以使用一些div选择器在
'a[href]'
前面加上前缀:'.mydiv a[href]'
,以防止监视所有元素。加载完成后插入它
$('a[href]').each(function(){
$(this).attr('href', $(this).attr('href').replace("http://external.com", "http://my.domain.com");
});
$('img[src]').each(function(){
$(this).attr('src', $(this).attr('src').replace("http://10.2.3.4", "http://my.domain.com");
});
您可以使用一些div选择器在
'a[href]'
前面加上前缀:'.mydiv a[href]'
,以防止查看所有元素。您可能还会发现类似URI.js的内容很有用。例如,您可以将replace函数与它们的函数一起使用,以使所有URL都是相对的
例如:
$("#external-page").load(URL, function() {
injectDataInPage();
$("#external-page img").each(function(i, img){
var src = $(img).attr('src');
$(img).attr('src', new URI(src).resource());
});
$("#external-page a:link").each(function(i, link){
var href = $(link).attr('href');
$(link).attr('href', new URI(href).resource());
});
doOtherStuffInPage();
});
诚然,这是未经测试的,但想法应该是显而易见的。您也可能会发现类似URI.js的东西很有用。例如,您可以将replace函数与它们的函数一起使用,以使所有URL都是相对的 例如:
$("#external-page").load(URL, function() {
injectDataInPage();
$("#external-page img").each(function(i, img){
var src = $(img).attr('src');
$(img).attr('src', new URI(src).resource());
});
$("#external-page a:link").each(function(i, link){
var href = $(link).attr('href');
$(link).attr('href', new URI(href).resource());
});
doOtherStuffInPage();
});
当然,这是未经测试的,但想法应该是显而易见的。或者在注入DOM之前在html中替换它:
returnedHtml.replace(“from”,“to”)
。为什么你认为你需要node.js呢?我已经尝试了html.replace(“from”,“to”)
,但是那完全把一切都搞糟了。我将重新审视这个想法,看看为什么它不起作用。谢谢我之所以考虑使用Node.js,唯一的原因就是我知道这是可以做到的。但除此之外,第三方还提供了其他更复杂的API,这是毫无意义的。使用Node.js,我可以拥有更多的控制权,并为这些API创建一个“适配器”。但是如果我可以完全避免Node.js,那就更好了。谢谢你的建议,我会尝试一些方法,看看效果如何。或者在注入DOM之前,在html中替换它:returnedHtml.replace(“from”,“to”)
。为什么你认为你需要node.js呢?我已经尝试了html.replace(“from”,“to”)
,但是那完全把一切都搞糟了。我将重新审视这个想法,看看为什么它不起作用。谢谢我之所以考虑使用Node.js,唯一的原因就是我知道这是可以做到的。但除此之外,第三方还提供了其他更复杂的API,这是毫无意义的。使用Node.js,我可以拥有更多的控制权,并为这些API创建一个“适配器”。但是如果我可以完全避免Node.js,那就更好了。谢谢你的建议,我会尝试一些事情,看看效果如何。谢谢你的建议,我会尝试一些事情,看看效果如何。谢谢你的建议,我会尝试一些事情,看看效果如何。