2016-11-29 79 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])。 –