2011-01-19 10 views
0

JavaScriptを使用する指定されたURLがURLスキームのリストと一致するかどうかを確認したいと思います。私はこれまで遠くに来た:JavaScriptを使用したURLスキームのリストとURLの比較

function on_wikipedia() { 
    // the list of allowed locations 
    var allowed_locations = new Array("http://*.wikibooks.org/*" 
            , "http://*.wikimedia.org/*" 
            , "http://*.wikipedia.org/*" 
            , "http://*.wikiquote.org/*" 
            , "http://*.wikiversity.org/*" 
            , "http://*.wiktionary.org/*" 
            , "http://www.mediawiki.org/*" 
            , "https://secure.wikimedia.org/*" 
            ); 

    // current location; e.g. "http://en.wikipedia.org/wiki/Main_Page" 
    var current_location = content.document.location; 

    var valid = false; 

    // compare current_location to allowed_locations and set valid to true, 
    // if it matches 
    // 
    // FIXME 

    return valid; 
} 

多分、このようにするのは悪い考えです。たぶん私は比較を行うために正規表現を使用する必要がありますか?残念ながら私は失われています...私はJavaScriptの経験が全くありません。誰かが正しい方向に私を指差してくれますか?

+0

注意JavaScriptでは 'var foo = new Array(...);'の代わりに 'var foo = [...];'を使います。 – Phrogz

答えて

1
function onWikipedia(){ 
    // Untested 
    var allowedLocations = /^(?:http:\/\/(?:.+?\.wik(?:ibooks|imedia|ipedia|iquote|iversity|tionary)\.org|www\.mediawiki\.org)\/|https:\/\/secure.wikimedia.org\/)/i; 
    return allowedLocations.test(content.document.location); 
} 

正規表現の末尾のiは、大文字と小文字を区別しません。削除したくない場合は削除してください。一般的に

、正規表現は、この意見:

  • 、次のいずれかを探し、文字列(^)の前でスタート((?:...|...)):次のいずれかに続いて
    • http://その後、リテラル期間(\.)とそれに続くが続きます(\/
      • 基本的には何か(.+?.+?非常に寛容でにhttp://foo.bar.com/?.wikibooks.org/のようなものを可能にすることをしてから...ああ、これらのドメイン名の1、.orgに続く、または
      • www.mediawiki.org
    • https://secure.wikimedia.org/

注意一致させる。文字、数字、アンダースコア、ピリオド、またはハイフンなど、より限定的なものが必要な場合があります。その場合、あるいは、[\w.-]+?

.+?を置き換える代わりに、全体のURLに対するテストの、あなただけのホスト名に対してチェックすることがあります:それは `使用するためにちょうど約あらゆる方法で優れていることを

function onWikipedia(){ 
    if (location.protocol=='https:'){ 
    return location.hostname == 'secure.wikimedia.org'; 
    }else{ 
    var regexp = /^(?:www\.wikimedia|.+?\.wik(?:ibooks|imedia|ipedia|iquote|iversity|tionary)\.org/i; 
    return regexp.test(location.hostname); 
    } 
} 
+0

ありがとうございます。最初のソリューションが機能します。私は2番目のものを得ることができませんでした。 –

関連する問題