0

本当に奇妙なことをしているコードの塊があります。

function getQuerystring(key, default_){

  if (default_==null) default_=""; 
  key = key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
  var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
  var qs = regex.exec(window.location.href);
  if(qs == null)
    return default_;
  else
    return qs[1];
}

var isThankyou = getQuerystring('CONFIRMATION');

この関数は、パラメータの URL をチェックします (この場合は CONFIRMATION)。すべてが正しいことがわかりますが、ブラウザがコードをロードすると、コンソールにエラーがスローされます。

キャッチされていない SyntaxError: 無効な正規表現: 欠落している /

最終的に、このコードのチャンクは、ユーザーが URL の確認ページにいるかどうかを判断するために使用されます。そうである場合は、Google アナリティクス コードをトリガーして、GA で e コマースの購入情報を追跡します。

私に問題を引き起こしている行は次のとおりです。

key = key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');

ブラウザでページを読み込んでソースを見ると、次のように表示されます。

key = key.replace(/[\[]/,'\\\[').replace(/[\/,'\\\]');

]]直前に2人登場

これが奇妙なことです。最初の行をコメントアウトして行を複製すると、エラーはスローされません (]]ただし、まだ表示されます)。

//key = key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
  key = key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');

問題の原因となっている場合に備えて、replace メソッドのチェーンを外してみました。

key = key.replace(/[\[]/,'\\\[');
  key = key.replace(/[\]]/,'\\\]');

これにより、ブラウザーのソースで次のようになります。

key = key.replace(/[\[]/,'\\\[');
  key = key.replace(/[\/,'\\\]');

いずれにせよ、問題は2番目の.replaceが1つをエスケープしないか、何らかの理由]で2つを保持していることにあるようです。]]

また、キャッシュと Cookie を消去し、すべてのプラグインをオフにしてみました。Chrome、Firefox、および Safari でテストしましたが、3 つのブラウザすべてで同じ結果が得られました。

コードの完全なブロックを確認できるページは次のとおりです (頭の最後): https://secure2.convio.net/ccod/site/Ecommerce?store_id=2841

4

2 に答える 2

1

あなたのコードは少し複雑に見えます。ここにもっと簡単なものがあります:

function getQueryString(key) {
    var index, url, parts, i, subparts;
    url = window.location.href;
    index = url.indexOf("?");
    if (index === -1) {
        return null;
    }
    url = url.substr(index);
    parts = url.split("&");
    for (i = 0; i < parts.length; i += 1) {
        subparts = parts[i].split("=");
        if (subparts[0] === key) {
            return subparts[1];
        }
    }
    return null;
}

(未テスト)

于 2013-03-09T00:34:01.447 に答える
0

これによりエラーが発生します。これは、次key = key.replace(/[\/,'\\\]')のようにバックスラッシュを使用して正規表現の末尾にあるスラッシュをエスケープするためです。/[\/

代わりにこれを試してくださいkey = key.replace(/[\\/,'\\\]')

于 2013-03-09T00:32:59.017 に答える