本当に奇妙なことをしているコードの塊があります。
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