それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

auお客様サポートがOperaで動かない件に対応する

au お客様サポートがOperaで動かない.本件についてau に問い合せた結果、Operaで動作確認取れています。ちゃんと表示されます。というよく分らない回答.

わたしゃ、クリックEventがおかしいと言っているのがですが.

Operaでau お客様サポートサイトを動かす方法

https://cs.kddi.com/html/js/ht_top_submitInterceptor.js
を禁止URLに入れてブロックする

以前は、#https://cs.kddi.com/html/js/ht_submitInterceptor.js #=>2013-04-01からアドレスが変わったよ

これが一番手っ取り早い.

理由.ProtypeJSで、外部リンクと内部リンクを切り分けてターゲットを変えてるらしいんですけど,コードがおかしい.手っ取り早いのは,OnClickのEventのファイルを読み込まないこと.

2013-04-04追加 デザイン変更後も相変わらずです。


サイトデザイン変更後も相変わらずOperaで動かない。。。
相変わらず、submit interceptor がオカシイ。

https://cs.kddi.com/html/js/ht_top_submitInterceptor.js
を禁止URLに入れてブロックする

(スクリーンショット 2013-04-04 0.11.03)

名前からして、面倒なことやってそうですよね。submit_interceptor.js 送信割り込み.jsって

なにをやってるか追いかけてみたら

イベントハンドラを作るあたり。

Object.Interceptor = {
	ignores: [],
	_pointcut: function(target, methodName, invoke) {
		var method = target[methodName];
		target[methodName] = function() {
			var invocation = {
				"target": this,
				"method": method,
				"methodName": methodName,
				"arguments": arguments,
				"proceed": function() {
					if (!method) {
						return true;
					}
					return method.apply(target, this.arguments);
				}
			};
			return invoke.apply(null, [invocation]);
		};
	},
	pointcut: function(target, methodName, aspect) {
		this._pointcut(target, methodName, aspect);
	},
	submit: function(formId) {
		var invocation = {
			"target": this,
			"proceed": function() {
				return !duringSuppression;
			}
		}
		if (checkLoading(invocation)) {
			document.getElementById(formId).submit();
		}
	}
}

で実際に呼び出される関数がコッチ

function (invocation) {
	var result = invocation.proceed();

	if (result !== false) {
		if (duringSuppression) {
//alert("2度押し防止機能発動");
			return false;
		}
//testSleep(5);
		target = invocation.target;

		if (isSuppressTargetLink(target)) {
			var dummyForm = document.getElementById("dummyForm");
			var dummySubmit;
			var action = invocation.target.href;

			if (!dummyForm) {
				dummyForm = document.createElement("form");
				dummyForm.id = "dummyForm";
				dummyForm.method = "get";
				dummyForm.style.display = "none";

				if (!action.startsWith("javascript:")) {
					var queryIndex = action.indexOf("?");
					var queryString;
					if (queryIndex != -1) {
						queryString = action.substring(queryIndex);
						action = action.substr(0, queryIndex);
					}

					if (queryString) {
						// 先頭の?を除去
						queryString = queryString.substring(1);

						var pair = queryString.split("&");
						for (var i = 0; i < pair.length; i++) {
							var param = pair[i].split("=");

							var dummyHidden = document.createElement("input");
							dummyHidden.type = "hidden";
							dummyHidden.name = param[0];
							dummyHidden.value = param[1];

							dummyForm.appendChild(dummyHidden);
						}
					}
				}

				dummySubmit = document.createElement("input");
				dummySubmit.id = "dummySubmit";
				dummySubmit.type = "submit";

				dummyForm.appendChild(dummySubmit);
				document.body.appendChild(dummyForm);

				Object.Interceptor.pointcut(dummySubmit, "onclick", checkLoading);
			} else {
				dummySubmit = document.getElementById("dummySubmit");
			}

			dummyForm.action = action;

			dummySubmit.click();

			duringSuppression = true;

			return false;
		} else if (isSuppressTargetForm(target)) {
			if (!isIE && !isWebKit) {
				target.disabled = true;
			}
			duringSuppression = true;
		}
	}

	return result;
}


二度押し防止ですって。しかも、GET を?文字列で検出してる。

2度押しされたくなければ element 毎ノードから消しなよ。っていうか二度押しされて問題あるようなページ遷移作っちゃダメでしょ・・・au お客様サポートはクソなのでFenrirあたりにやっていただきたい。