target =“ _blank”を使用する理由Javascriptが失敗しますか?
-
06-07-2019 - |
質問
target =" _blank"を使用する多数のリンクがあります。新しいウィンドウで開く属性。これらのリンクのクリックにGoogleアナリティクスの目標追跡を添付したいと思います。
これを行うために、onclick =" pageTracker._trackPageview( '/ event / outgoing')"を添付してみました。リンクの属性。
しかし、target =" _blank"のリンクについては、属性では、JavaScriptのonclickイベントはスキップされます。そのため、目標は記録されません。つまり、このリンクは目標を正常に記録します。
<a href="http://www.yahoo.com" onclick="pageTracker._trackPageview('/event/outgoing')">Click me</a>
しかし、これはそうではありません:
<a href="http://www.yahoo.com" target="_blank" onclick="pageTracker._trackPageview('/event/outgoing')">Click me</a>
これがなぜ発生するのか、誰にもわかりませんか?簡単な解決策がないと仮定すると、Javascriptを使用して問題を解決する必要があると思います。次のコードは目標を正常に記録します(ただし、リンクは開きません):
function attach_goal_tracking() {
var links = document.getElementsByClassName("buyTicketsLink");
for(var i=0; i<links.length; i++) {
links[i].onclick = record_goal;
}
}
function record_goal(e) {
e.stop();
pageTracker._trackPageview('/event/outgoing');
}
しかし、リンクを開くためにrecord_goal関数に追加すると...
function record_goal(e) {
e.stop();
pageTracker._trackPageview('/event/outgoing');
var newWindow = window.open(this.getAttribute('href'), '_blank');
newWindow.focus();
}
...その後、目標の追跡に失敗します。
これがなぜ起こるのか、そしてこの問題を回避するために私がすべきことは誰にも教えてもらえますか?参考までに、JavaScriptのプロトタイプを使用しています。
解決
ポップアップブロッカー(Googlebarを考えている)がウィンドウのオープンを停止し、( onclick
が存在する) onclick
コードを妨げる問題がある可能性があります実行から。たとえば、 this およびこれ他の人が抱えている同様のサウンドの問題。
または、クリックハンドラコードがエラーをスローして、残りのコードの完了を妨げている可能性があります。イベントをどのようにバインドしているかについての質問に対する私のコメントを参照してください。 IEでは e.stop()
が失敗する可能性があります。
しかし、あなたの仮説は間違っています。 target =&quot; _blank&quot;
と onclick =&quot; ...&quot;
は正常に連携します。
適切なテストケース: http://jsbin.com/anahe ( / edit
をURLに追加してコードを編集します)。 ポップアップブロッカーをオフにする必要がある場合があります:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Sandbox</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<script>var clickCount= 0;</script>
</head>
<body>
<a href="http://www.google.com" target="_blank" onclick="document.getElementById('dbg').innerHTML = ++clickCount">
open new
</a>
<div id="dbg"></div>
</body>
</html>
リンクをクリックすると、新しいウィンドウが開き 、リンクがクリックされた回数でdivが更新されます。 IE6、IE7、FF2、FF3.5、Chrome 2、Chrome 3、Opera 9でこれをテストしました。
他のヒント
可能性はありますが、勝者はe.stop()が不要であり、次のコードが新しいタブを正常に開き、古いタブで非同期にアラートを出すことを確認できます(結果的にフォーカスを取り戻します)。
<a href="" target="_blank">reload</a>
<script>
var as = document.getElementsByTagName('a');
for (var i = 0; i < as.length; i++) {
var a = as[i];
a.onclick = function(e) {
setTimeout(function() {
alert('hi hi');
}, 1000);
}
}
</script>
次善策は、リンクトラッキングページを作成し、そのページを介してすべての外部リンクをルーティングすることです。