1

編集

私は当初、ブラウザの検出が問題の原因であるかのようにこの質問を言いましたが、それは単純に間違った構文が原因でした。

  1. すべての括弧を必ず閉じてください (括弧は常にペアである必要があります!)
  2. コードにスペースを空けてください (間違いを見つけやすくなります)。
  3. if乱雑な条件式を変数に移動して、ステートメントをクリーンアップします
  4. セマンティックな (理想的には明確な) 変数名を使用します — これにより、コードが何をしようとしているのかを理解しやすくなります

たとえば、次のようになります。

const layoutStyles = document.querySelector('#layoutStyles');
const testElement = document.createElement('div');

let supportsFlex = testElement.style.flex !== undefined;
let supportsFlexFlow = testElement.style.flexFlow !== undefined;

if (supportsFlex && supportsFlexFlow) {

  layoutStyles.setAttribute('href', 'flex-layout.css');

} else {

  layoutStyles.setAttribute('href', 'float-layout.css');
}

技術的にはこれと同等です:

const cond = document.querySelector('#cond');
const tstEl = document.createElement('div');
if (tstEl.style.flex!==undefined&&tstEl.style.flexFlow!==undefined)cond.setAttribute('href','flex-layout.css');
else cond.setAttribute('href','float-layout.css');

しかし、後者は読みにくく、理解するのがはるかに困難です。したがって、デバッグやリファクタリングも難しくなり、誤ってエラーが発生しやすくなります。

寄稿者がずっと前に回答に書いたように、言語の基礎を学ぶことが重要です。歩く前にクロール、走る前に歩く!


何らかの理由で、javascript のこの部分が、私が以前に書いた他のすべての機能をブロックしています。外すと作動し、戻すと作動しなくなります。

誰かが何が間違っているのかを見つけることができたら、私に知らせてください! 私は JS があまり得意ではないので、ここで何をしているのかさえ 100% 確信が持てません。

さて、私はこれを参考にしました。http://www.javascriptkit.com/javatutors/navigator.shtml

これが私のコードです:

//4th batch shows a warning box upon finding a visitor with an outdated browser
if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);
 var ffversion=new Number(RegExp.$1) // capture x.x portion and store as a number
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
 var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Opera/x.x or Opera x.x (ignoring remaining decimal places);
 var oprversion=new Number(RegExp.$1) // capture x.x portion and store as a number
 
if (ffversion<11 || ieversion<9 || oprversion<11.6)
 function browserwarning()
 {
 document.getElementById('oldbrowser').style.display="inherit";
 }
 //END OF 4TH BATCH
4

2 に答える 2

0

{該当なしがたくさんあります}

if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { 
    var ffversion = new Number(RegExp.$1);
}
else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
    var ieversion = new Number(RegExp.$1);
}
else if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { 
    var oprversion=new Number(RegExp.$1);
}

if (ffversion < 11 || ieversion < 9 || oprversion < 11.6) {
       document.getElementById('oldbrowser').style.display="inherit";
}

すべてのブラケットを閉じました。

とにかく、これを略奪することをお勧めします: http://www.quirksmode.org/js/detect.html

于 2013-02-19T12:53:55.563 に答える
0

if ステートメント内のいくつかの閉じ括弧と関数が無効であることを忘れています。このコードは、構文エラーなしで機能します。

//4th batch shows a warning box upon finding a visitor with an outdated browser
if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);
    var ffversion = new Number(RegExp.$1); // capture x.x portion and store as a number
} else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { //test for MSIE x.x;
    var ieversion = new Number(RegExp.$1); // capture x.x portion and store as a number
} else if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { //test for Opera/x.x or Opera x.x (ignoring remaining decimal places);
    var oprversion = new Number(RegExp.$1); // capture x.x portion and store as a number
}

if (ffversion < 11 || ieversion < 9 || oprversion < 11.6) {
    document.getElementById('oldbrowser').style.display = "inherit";
}

しかし、JavaScript コードの使用方法と記述方法を学習するために、いくつかの努力をすることを強くお勧めします。漢字も知らないのに中国語で手紙を書こうとしているようですね…

于 2013-02-19T12:54:24.120 に答える