0

Chrome のアドレス バーを再作成する小さなスクリプトを作成しました。このコードでは、ドメイン拡張子 (.com、.edu など) の入力をチェックし、拡張子が見つかった場合はブール値フラグを true に設定します。次に、フラグをチェックし、結果に基づいて Web サイトを開くか、クエリとして Google に送信します。さらに、Web サイトの場合は、文字列に http:// と www が含まれているかどうかを確認します。そうでない場合は、それを文字列に追加してから、Window.Open() を使用してターゲットを開きます。

ここで何が問題なのですか?

function openSite(){
     var domain_extensions = [".aero", ".asia", "...All Other Extensions...", ".zr", ".zw"];

        var isSite = false;

        var userIn = document.getElementById('in_field').value; //Retrieves Textbox code

        for (var i=0; i < domain_extensions.length; i++)
            if (userIn.search(domain_extensions[i]) !==-1)
                isSite = true;
                        //Checks against the array of extensions

        if (isSite === true){
            if (userIn.search("http://") === -1 || userIn.search("https://") === -1)
                {if(userIn.search("www.") === -1)
                    userIn = "http://www." + userIn;
                 else
                    userIn = "http://" + userIn;                        
                }

                window.open(userIn, '_blank');
                //if extension is found, open website
                        //if qualifier http:// or https:// and/or www. not found, append and open website               
            }

        else{
                var str = encodeURI("http://www.google.com/search?q=" + userIn);
                window.open(str, '_blank');

            } //Searches query for common extensions; if not found search google
    }
4

1 に答える 1

1

これは、search関数の使用法に問題があると思います。この関数は、引数として正規表現を取ります。この.文字は正規表現では特別であり、任意の文字に一致します。

例えば:

var test = "blasdfahsadfcomasdfasd";
console.log(test.search(".com")); // prints 11

.この動作をオーバーライドするには、バックスラッシュを先頭に追加します。

var test = "blasdfahsadfcomasdfasd";
console.log(test.search("\\.com")); // prints -1

さらに、文字列の末尾のみをチェックする場合は、次の$ように文字列の末尾に記号を追加します。

var test = "blasdfahsadf.comasdfasd";
console.log(test.search("\\.com$")); // prints -1; prints 12 w/o the $
于 2013-07-18T20:13:52.833 に答える