2016-11-29 53 views
-4

页面上的某些网址仍然在http中,我们无法在服务器端获得正确的结果。是否有一些JavaScript代码用http://重新写入所有的url或https://?通过javascript更改网页上的网址协议

编辑:

通过与T.J.的anwser测试。 Crowder我把所有的“a href”都替换掉了。

但是我有很多不同的地方有相似图片的网址:

<header class="category_header init_bg_mobile" data-bg="//test.jpg" data-bg-md="http://test2.jpg" data-bg-xs-2x="http://test.jpg" > 

所以我做了他的anwser和This anwser的混合。

 <script> 

     (function(){ 
     Array.prototype.forEach.call(

     document.body.innerHTML = document.body.innerHTML.replace('http://',  '//'); 

    )(); 

    </script> 

这是现在的技巧。

附注:我认为这不是一个好的做法,因为它改变了每个地方的“http://”在页面上,如果它在文本中显示,它也可以重写它。然而,它现在已经成功了。

+0

他们在链接? –

+1

你有什么尝试?如果他们在链接中,并且您正在使用jQuery,那么这很简单。 (即使它们不在链接中,它也是非常简单的) –

+0

问题是,jquery有时是http的url,因此没有加载 – user3605780

回答

2

如你所知,这里的正确的解决方法是修复这些链接的服务器端,理想地彻底消除了方案,创造方案相对网址是这样的:

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

但你说你不能那样做。

所以:

  • 你可以很容易地找到通过document.querySelectorAll所有a元素。
  • 您可以轻松地遍历结果。
  • ...并得到他们的href通过getAttribute(或通过href属性解析网址)
  • ......并在必要时(通过setAttributehref属性)来更新它。
  • 类似地,scriptlink rel="stylesheet"

这里有一个链接一个简单的例子:

Array.prototype.forEach.call(
    document.querySelectorAll("a[href]"), 
    function(link) { 
     if (link.href.startsWith("http://")) { 
      link.href = "https://" + link.href.substring(7); 
     } 
    } 
); 

确保在在</body>末,这样的元素,因为它运行时的存在script标签。

期广义根据需要为img(在src属性),script(该src属性),link[rel=stylesheet](该href属性),...(每个那些是有效的CSS选择器将与querySelectorAll工作。)

+0

您的解决方案似乎是我想要的东西,只有它不适合我。我更新了我的尝试。 – user3605780

+0

@ user3605780:查看上面的答案,并查看您问题中的代码。他们完全不一样。在答案中,我发现需要修复和修复它们的**元素**。在你的问题的代码中,你试图对'document.body.innerHTML'进行批量替换。 A)这是一个非常糟糕的主意,它完全撕下了文档并建立起来,B)你需要一个带有'g'标志的正则表达式才能工作(但参见[A])。 –