2017-03-17 57 views
-1

有很奇怪的。它看起來像在If語句之後,它停止的腳本。該頁面具有通過單擊按鈕調用的javascript函數。如果IE上的瀏覽器,我會做點什麼。否則,我關閉該頁面。我把警報聲明來測試它。但警報從未解僱。有人會告訴我我的代碼會出現什麼問題。之後如果聲明什麼都不會在javascript中觸發

還有就是我的按鈕調用該函數:

<input class="btn" id="btnClose" onclick="javascript:openFile();" type="button" value="Close" name="btnClose" /> 

有JavaScript函數:

function openFile() { 

      var url = 'file://' + document.getElementById("hdURL").value; 
      //alert('Open File' + url); 
      var location = document.getElementById("hdURL").value; 

      ////http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser 
      if ((/*@[email protected]*/false || !!document.documentMode) ||(!isIE && !!window.StyleMedia)) 
      { 
       alert('IE'); 
       //do something 
       window.self.close(); 
      } 
      alert('test'); //never fire 

      closeWindow(); 

     } 
+3

''不something' - 這是應該是一個評論?如果是這樣,它應該是'//做些事情'。 – Santi

+1

我看不到'isIE'在哪裏定義。看看你的瀏覽器控制檯。你在那裏看到錯誤嗎? – Amy

+0

@Amy這是一個很好的觀點。看看[引用的問題OP](http:// stackoverflow。com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser)爲他們的'if'邏輯,接受答案使用'var isIE =(...邏輯...) '。 OP複製+粘貼該邏輯並將其用作上述問題中他們的'if'語句的第一個條件,而不是像引用的答案那樣將其轉換爲var'isIE'。 – Santi

回答

1

首先,要給予信貸上的問題的意見Amy實現你的isIE未定義。


看看the question you referenced在您的代碼中接受的答案。它說以下內容:(我已經添加的箭頭以示出使用isIE

// Internet Explorer 6-11 
var isIE = /*@[email protected]*/false || !!document.documentMode; 
// |________  
//    | 
// Edge 20+ V 
var isEdge = !isIE && !!window.StyleMedia; 

通知如何其用於檢測邊緣引用變量,用於檢測IEisIE例子。在你的例子中,你沒有var isIE,所以這是未定義的 - 代碼失敗。


爲什麼它在IE瀏覽器而不是火狐/ Chrome瀏覽器?

如果第一個條件成立,JavaScript將不會評估OR的第二個條件 - 這就是所謂的Short Circuit Evaluation

使用IE時,第一個條件的計算結果爲true。這意味着第二個條件(和其中的語法錯誤)被忽略爲

但是,Chrome和Firefox在第一種情況下獲得false,並且必須評估第二種情況。一旦他們到達未定義的變量,就會拋出一個錯誤。


解決方案:

// Internet Explorer 6-11 
var isIE = /*@[email protected]*/false || !!document.documentMode; 

// Edge 20+ 
var isEdge = !isIE && !!window.StyleMedia; 

if (isIE || isEdge) { 
    //DO STUFF 
} 
+0

我怎樣才能讓艾米得分?謝謝你們所有人 – user819774

+0

沒必要。如果我想要我可以自己回答的代表。我很高興Santi回答並得到了一些代表。分享愛。 – Amy

0

它總是有幫助的準備jsifddle,這樣你就可以立即測試您的解決方案,並看到錯誤。 這也是最好檢查一下瀏覽器控制檯,顯示錯誤

看到工作示例

https://jsbin.com/sipukovono/edit?html,css,js,console,output

function openFile() { 

var isIE=false; // temporary definition 

var url = 'file://' + document.getElementById("hdURL").value; 
     //alert('Open File' + url); 
     var location = document.getElementById("hdURL").value; 


     if ((false || !!document.documentMode) ||(!isIE && !!window.StyleMedia)) 
     { 
      alert('IE'); 
      window.self.close(); 
     } 
     alert('test'); //never fire 

     closeWindow(); 

    } 
+0

我不確定「這裏有一個錯誤,只是將它設置爲」false「而忘記它是一個優雅的解決方案。 – Santi

+0

我想這個變量將在檢查它是什麼瀏覽器後設置。 使用jsbin用戶的工作代碼現在可以進行必要的修改和測試。正如我們可以看到原始問題那樣,確定代碼已損壞並不容易。 – plusz

相關問題