Здесь сильная головная боль.
У меня есть одностраничное приложение, использующее нокаут-компоненты и машинописный текст. Я интегрируюсь со сторонним поставщиком платежей, который вставляет iframe. Проблема, с которой я сталкиваюсь, заключается в том, что когда рабочий процесс перезапускается, создается новый прослушиватель событий, и поэтому платежи обрабатываются дважды (к счастью, в настоящее время это тестовая система) или три раза, если рабочий процесс выполняется в третий раз ...
Слушатель событий после первого запуска рабочего процесса: ![Image showing workflow run 1](https://i.stack.imgur.com/RJaVW.png)
Event listener after second workflow run
![enter image description here](https://i.stack.imgur.com/IjjEd.png)
Looking at the library (https://i4m.shift4test.com/js/jquery.i4goTrueToken.js) похоже, что он должен самостоятельно обрабатывать удаление слушателей событий, если он уже обнаруживает один, что означает, что проблема связана с моим кодом.
Я знаю, что проблема связана со мной, вероятно, использующим анонимную функцию:
private invokeIFrame = (): void => {
get("https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js", () => {
get("https://i4m.shift4test.com/js/jquery.i4goTrueToken.js", () => {
(<any>$('#form-main')).i4goTrueToken({
url: this.configuration().i4go_i4m_url(),
server: this.configuration().i4go_server(),
accessBlock: this.configuration().i4go_accessblock(),
Code omitted for brevity
Я пытался извлечь код в обычную функцию, но безуспешно:
private invokeIFrame = (): void => {
get("https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js", () => {
get("https://i4m.shift4test.com/js/jquery.i4goTrueToken.js", () => this.loadIframe())
});
}
private loadIframe = () => {
(<any>$('#form-main')).i4goTrueToken({
url: this.configuration().i4go_i4m_url(),
server: this.configuration().i4go_server(),
accessBlock: this.configuration().i4go_accessblock(),
Code omitted for brevity
К сожалению, теги скриптов в html не работают. Все еще не уверен, почему это так, и я не могу привязать его к моему экземпляру jquery (несмотря на то, что он выставил его через webpack et c), поэтому мне нужно привязать его, как указано выше, но несколько прослушивателей событий вызывают множественную оплату обработка. В идеале я бы сам удалил события вручную. Любые мысли приветствуются. Спасибо.