コンテキストのために、ビデオトラッキングのためのomniture(adobe)sitecatalystのプラグインを作成しています。プラグインをsitecatalyst形式で書き込む前に、そのプラグインが動作していることを確認したいと思います。私は同じコードをテストしていますが、jQueryを使用しています.jQueryが変数/スコープをどのように処理するかは問題ありません。しかし、Javascriptを使って直接行うのはもう少し難しいことが分かります。JavaScriptの可変スコープAddEventListner
負荷でvar vsa = new Array();
var vp = new Array();
vsa = document.getElementsByTagName('video');
if(vsa.length>0){
for(var vvv=0;vvv<vsa.length;vvv++) {
vsa[vvv].addEventListener('seeked',function() { if(vp[vsa[vvv].id]) { s.Media.play(vsa[vvv].id,vsa[vvv].currentTime); }},false);
vsa[vvv].addEventListener('seeking',function() { if(vp[vsa[vvv].id]) { s.Media.play(vsa[vvv].id,vsa[vvv].currentTime); }},false);
vsa[vvv].addEventListener('play',function() {
if(!vp[vsa[vvv].id]) {
vp[vsa[vvv].id] = true;
s.Media.open(vsa[vvv].id,vsa[vvv].duration,s.Media.playerName);
s.Media.play(vsa[vvv].id,vsa[vvv].currentTime);
} else {
s.Media.play(vsa[vvv].id,vsa[vvv].currentTime);
}},false);
vsa[vvv].addEventListener('pause',function() { if(vp[vsa[vvv].id]) { s.Media.stop(vsa[vvv].id,vsa[vvv].currentTime); }},false);
vsa[vvv].addEventListener('ended',function() { vp[vsa[vvv].id] = false; s.Media.stop(vsa[vvv].id,vsa[vvv].currentTime); s.Media.close(vsa[vvv].id); },false);
if (typeof vsa[vvv].error != 'undefined' && vsa[vvv].error) {
var scvt_msg = 'Error Not Captured';
if(typeof vsa[vvv].error.code != 'undefined') {
switch (vsa[vvv].error.code) {
case MEDIA_ERR_ABORTED:
scvt_msg = 'vsa[vvv]eo stopped before load.';
break;
case MEDIA_ERR_NETWORK:
scvt_msg = 'Network error';
break;
case MEDIA_ERR_DECODE:
scvt_msg = 'vsa[vvv]eo is broken';
break;
case MEDIA_ERR_SRC_NOT_SUPPORTED:
scvt_msg = 'Codec is unsupported by this browser';
break;
}
}
s.tl(this,'o','video: ' + scvt_msg);
}
}
}
は、(イベントリスナーが正しく取り付けされているという意味)エラーがない:私が午前のはここです。ビデオの再生を押すと、「vsa [vvv] is undefined」と表示されます。
if(!vp[vsa[vvv].id])
でイベントリスナー関数からアクセスできるVSA、VP、およびSの「グローバル」VARSを得るためにどのように任意のアイデアを開始したコードの行に?
ありがとうございました!
ところで、 'new Array'の代わりに配列リテラルの表記' [] 'を使用してください。それはよりきれいで、邪悪なコーナーケースは少ない。 – hugomg