2017-10-27 11 views
0

私は比較的JavaScriptの新機能です。ホストされているJavascript関数をオーバーライドする

私は現在、ホストされたJSからjavascript関数をオーバーライドする方法を理解しようとしています。

背景:

我々はアメックスのカード決済(銀行発行)を受け入れることができなくなります。しかし、私たちの埋め込まれた寄付フォームでは、カード番号が挿入されてもAmexカードが検出されます。

Chromeを使用して、私が推測しているこの機能は、カードタイプの自動検出に使用されています。/

function a(n) { 
 
    var m = /^4/, 
 
     i = /(^5[1-5])|^(222[1-8][0-9]{2}|2229[0-8][0-9]|22299[0-9]|22[3-9][0-9]{3}|2[3-6][0-9]{4}|27[01][0-9]{3}|2720[0-8][0-9]|27209[0-9])/, 
 
     o = /^3[47]/, 
 
     l = /^6(?:011|5|4[4-9]|22(?:1(?:2[6-9]|[3-9])|[2-8]|9(?:[01]|2[0-5])))/, 
 
     h = /^(?:5[0678]|6304|6390|67)/, 
 
     j = /^3(?:0[0-5]|[68][0-9])[0-9]/, 
 
     k = /^(4026|417500|4405|4508|4844|4913|4917)/; 
 
    if (k.test(n)) { 
 
     return "electron" 
 
    } else { 
 
     if (m.test(n)) { 
 
      return "visa" 
 
     } else { 
 
      if (i.test(n)) { 
 
       return "mastercard" 
 
      } else { 
 
       if (o.test(n)) { 
 
        return "amex" 
 
       } else { 
 
        if (l.test(n)) { 
 
         return "discover" 
 
        } else { 
 
         if (h.test(n)) { 
 
          return "maestro" 
 
         } else { 
 
          if (j.test(n)) { 
 
           return "diners" 
 
          } else { 
 
           return "unknown" 
 
          } 
 
         } 
 
        } 
 
       } 
 
      } 
 
     } 
 
    } 
 
}

私は、"O =/^ 3 [47] /" 他の何かにやアメックスカードが検出できないので、それを完全に削除を無効にすることができるだろうHTMLの中に挿入しますか?

+0

検出中!=受け入れ中です。このコードを変更するだけで十分です。あなたは本当に "埋め込まれた寄付フォーム"を提供するサービスに連絡して、何をすべきか尋ねるべきです。 – Bergi

答えて

0

おそらく解決策は、amexが返された場合は独自のif文を作成し、amexをunknownに設定することです。

var card = function a(n); 
if(a === 'unknown' || a === 'amex'){ 
DoStuff(); 
}else{ 
DoRecognizedstuff(); 
} 

これは、この問題を解決するのに役立ちます。これはあなたが望むものではありませんか?また、これに機能を書き換えることができます:あなたはこの機能を自分で呼び出す場合

function a(n) { 
 
    var m = /^4/, 
 
     i = /(^5[1-5])|^(222[1-8][0-9]{2}|2229[0-8][0-9]|22299[0-9]|22[3-9][0-9]{3}|2[3-6][0-9]{4}|27[01][0-9]{3}|2720[0-8][0-9]|27209[0-9])/, 
 
     l = /^6(?:011|5|4[4-9]|22(?:1(?:2[6-9]|[3-9])|[2-8]|9(?:[01]|2[0-5])))/, 
 
     h = /^(?:5[0678]|6304|6390|67)/, 
 
     j = /^3(?:0[0-5]|[68][0-9])[0-9]/, 
 
     k = /^(4026|417500|4405|4508|4844|4913|4917)/; 
 
    if (k.test(n)) { 
 
     return "electron" 
 
    } else { 
 
     if (m.test(n)) { 
 
      return "visa" 
 
     } else { 
 
      if (i.test(n)) { 
 
       return "mastercard" 
 
      } else { 
 
       if (l.test(n)) { 
 
         return "discover" 
 
        } else { 
 
         if (h.test(n)) { 
 
          return "maestro" 
 
         } else { 
 
          if (j.test(n)) { 
 
           return "diners" 
 
          } else { 
 
           return "unknown" 
 
          } 
 
         } 
 
        } 
 
       } 
 
      } 
 
     } 
 
    }

にのみ可能となります。それがコールバックか、ホストされたJSからの何かによって呼び出された場合、動作しません。これがスタンドアロンのスクリプトであれば、あなた自身でJSをホストすることができます。

+0

はい、ホストされたJSからのコールバックです。しかし、作成したコードをコピーしての中に入れると、うまくいくでしょうか? – Fuzz

+0

また、ここに埋め込みJSがあります。何かここで作ることができますか? window.bboxInit = function(){ bbox.showForm( '039de06f-b1e1-4704-ab40-ce5942a27a32'); }; (function(){ var e = document.createElement( 'script'); e.async = true; e.src = 'https://bbox.blackbaudhosting.com/webforms/bbox-min.js'; document.getElementsByTagName( 'head')[0] .appendChild(e); }()); – Fuzz

+0

こんにちは、私はwebformを読み込むことができないので、それが動作するかどうかわかりません。しかし私が示唆しているのは、あなたがあなたが上記のチェックをするあなたのウェブサイトを置くという形であるということです。あなたが未知のものとして同じことをするように。フォームがロードされている場合は、javascriptを使用してフォームの値を確認できます。値がamexの場合、値をunknownに変更することができます。 amexが置かれているときの値は常に不明です –

関連する問題