3

Geobytesの無料の JavaScript である「複数の国からのユーザーをそれぞれ複数のページにリダイレクトするにはどうすればよいですか?」の例のコードを使用しています。

英国またはノルウェーからの訪問者が私のサイトを閲覧している場合、それらの国向けに特別に作成されたページにリダイレクトされますが、訪問者が他の国 (オーストラリア、米国) からの場合、それらの国のページにはリダイレクトされません。私のサイト (工事中)は空白のままです。

これらの英国以外のノルウェー以外のユーザーを正しいサイトに送信できるようにしたいと考えています.

私のサンプルコード:

 <head>
    <script language="Javascript" src="http://gd.geobytes.com/Gd?after=-1"></script>
    <script language="javascript">
    var UK="UK";
    var Norway="NO";

    if(typeof(sGeobytesLocationCode)!="undefined")
    {
       var sCountryCode=sGeobytesLocationCode.substring(0,2);

          if(UK.indexOf(sCountryCode)>=0)
          {
             // UK Visitors would go here
             document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=http://www.google.co.uk'>");
          }
          else if(Norway.indexOf(sCountryCode)>=0)
          {
             // Norway Visitors would go here

             document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=http://www.google.no'>");
          }



else
          {
             // World Visitors would go here
             document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=http://www.google.com/ncr'>");
          }
       }
  //  }
    </script>
    </head>
4

6 に答える 6

5

あなたの場合の問題は、現在のサイト (winappleiphone.info) で、次の変数を持つ国をチェックしていることです。

  • 英国、米国、カナダ、sPhilippineLocations、sKoreanLocations、sChineseLocations

これらの変数のうち、UK 変数と USA 変数のみを宣言しましたが、他の変数を宣言せずに使用しようとしていて、値を割り当てようとすると、JavaScript エラーが発生し、スクリプトが失敗することがあります。

于 2013-01-01T12:22:55.453 に答える
5

このコードを試してください

//* init location codes for redirecting
var finded = false,
    redirections = {
        UK: 'http://www.adworkmedia.com/go.php?camp=3135&pub=13435&id=7547&sid=',
        US: 'http://www.adworkmedia.com/go.php?camp=2907&pub=13435&id=7038&sid=',
        CA: 'French.htm',   // Canada
        PH: 'Philippine.htm',   // Philippines
        KO: 'Korean.htm',   // Korea
        CH: 'Chinese.htm'   // China
    };
//* Checking location code
if(typeof(sGeobytesLocationCode) != "undefined")
{
    var sCountryCode = sGeobytesLocationCode.substring(0,2);
    for(var i in redirections) {
        if(i == sCountryCode) {
            document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=" + redirections[i] + "'>");
            finded = true;
        }
    }
}
//* location code not finded - redirect to default page
if(!finded) {
    document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=World.htm'>");
}

ご覧のとおり、多くの kB のコードをコピーすることなく、新しいリダイレクト ページを簡単に追加/削除できます。私が提供したコードの一部が間違っている可能性があります。必要に応じて自分で修正してください

于 2013-01-04T10:00:30.700 に答える
2

sGeobytesLocationCode が未定義の場合、リダイレクトしていません。また、比較対象の場所が多数ある場合、if else ステートメントは手に負えなくなり始めます。br3tには良い解決策があります。また、sGeobytesLocationCode が長さ 2 以上の文字列であることを確認し、大文字にキャストする必要があります (念のため)。

    redirections = {
        UK: 'http://www.adworkmedia.com/go.php?camp=3135&pub=13435&id=7547&sid=',
        US: 'http://www.adworkmedia.com/go.php?camp=2907&pub=13435&id=7038&sid=',
        CA: 'French.htm',   // Canada
        PH: 'Philippine.htm',   // Philippines
        KO: 'Korean.htm',   // Korea
        CH: 'Chinese.htm'   // China
    };
if(typeof(sGeobytesLocationCode) === 'string' && sGeobytesLocationCode.substring.length > 1)
{
    var sCountryCode = sGeobytesLocationCode.substring(0,2).toUpperCase();
    for(var i in redirections) {
        if(i == sCountryCode) {
            document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=" + redirections[i] + "'>");
           return;
        }
    }
}
//* location code not redirected - redirect to default page
    document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=World.htm'>");
于 2013-01-07T02:56:17.637 に答える
2

sGeobytesLocationCodeあなたのロジックは、が未定義の場合を考慮していません。sGeobytesLocationCodeまた、が文字列でない場合、または 2 文字未満の場合、エラーが発生する可能性があります。以下のコードは、デフォルトの URL の設定から開始します。これは、ユーザーが英国またはノルウェーにいないことを前提としています。その後、いくつかの条件を満たした場合にのみ、この URL が変更されsGeobytesLocationCodeます。ユーザーがリダイレクトされないパスはありません。substringとにエラーがないことを確認するロジックも追加しましたindexOf。さらに、リダイレクトのロジックは、すべての if-else ブロック内ではなく、1 か所でのみ発生します。

<head>
    <script language="Javascript" src="http://gd.geobytes.com/Gd?after=-1"></script>
    <script language="javascript">
        var UK="UK";
        var Norway="NO";

        // default url, if country is not uk or norway
        var url = "http://www.google.com/ncr";

        if(typeof(sGeobytesLocationCode) == "string" && sGeobytesLocationCode.length >= 2)
        {
            var sCountryCode = sGeobytesLocationCode.substring(0,2);

            if (UK.indexOf(sCountryCode) >= 0)
            {
                // UK Visitors would go here
                url = "http://www.google.co.uk";
            }
            else if (Norway.indexOf(sCountryCode) >= 0)
            {
                // Norway Visitors would go here
                url = "http://www.google.no";
            }
        }

        document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=" + url + "'>");
    </script>
</head>

注:私が提供したコードは、ケースを機能させるために必要ないくつかの小さな変更を加えた正確なコードを使用しています。ただし、コードはより適切に記述できます。次の点を考慮してください。

  • すべてのブラウザがサポートしているわけではありませんindexOf。すべてのブラウザをサポートするために、デフォルトの実装を提供する必要がある場合があります。これをグーグルで検索できます。コードを提供する場所がいくつかあります。そうは言っても、すでに2文字の国コードのみを含めindexOfていたため、この場合は冗長に思え ます. substringを取り出すことを検討indexOfし、国コードが等しいことを確認してください。

  • コードの保守性を高めるために、すべての国コード (これまでの「NO」と「UK」) とそれに対応する URL を配列に追加することを検討してください。このようにして、配列をループし、比較を行って URL を設定する単一のコード ブロックのみを記述できます。今のやり方では、確認したい国コードごとにロジックを繰り返す if ステートメントが必要です。今はそれほど悪くはありませんが、将来国コードを追加する予定がある場合は、すぐに見苦しくなります.

于 2013-01-07T18:36:45.220 に答える
1

これはうまく機能するようで、はるかにコンパクトです。

<head>
    <script language="Javascript" src="http://gd.geobytes.com/Gd?after=-1"></script>
    <script language="javascript">
        var countrySuffix = {
            //add more specific countries here if you want
            "UK": 'http://www.google.co.uk',
            "NO": 'http://www.google.no',
            //The default location we'll go to if we're not in any of the above
            //   locations
            "DEFAULT": 'http://www.google.com/ncr'
        };

        var sCountryCode;

        if(sGeobytesLocationCode && sGeobytesLocationCode.length > 1){
            sCountryCode = sGeobytesLocationCode.substring(0,2);
        }

        var targetSite = countrySuffix[(sCountryCode || "DEFAULT").toUpperCase()] || countrySuffix.DEFAULT;
        document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=" + targetSite + "'>");
    </script>
</head>
于 2013-01-08T08:33:16.467 に答える