JAVA,CSS の覚え書き

Javascript,CSSを使ったページを作成した時の覚え書き

セクション2:javascriptについて(2)

        
1.【Jscriptで画像処理】について
	Javaアプレットで以前作成した画像処理をcanvasとJavaScriptで
	作ってみた。
	画像をピクセル単位で移動させて、波紋状に変化させています。
	(ソースはページのソース表示で確認出来る)

2.問題は、Ghromeでは正常に動作するが、IE11では動作しない。
	ネットでいろいろ検索して試してみたがどうしても動作しないが
	ふと再読み込みすると何故か正常に動作する。

	現象の詳細は今後分析することにする。

3.IE対策として、ページ表示後にreloadをすることにしたが、これが
	なかなか問題で、setTimeout等を使ってページ表示後にreloadしても
	setTimeoutも初期化されてロードされるので、結果としてreloadを
	繰り返してしまった。

	正常動作した対策は
var reload=function(){
		if(window.name !== 'abc'){
			location.reload();
			window.name='abc';
		}
	};
	reload();
これでwindow.nameは一度設定するとセッション終了まで保持 されるようなので、reloadしても一度しか実行されないようになる。 ただし、一度表示されるとwindow.nameは保持されるため、ページを 移動後再表示すると、JavaScriptが動作しない表示に戻ってしまう。 対策として、ページ移動ボタンクリック時にwindow.nameをクリア する対策を入れてみたが、ブラウザの戻るボタンで移動した場合 効果が無いため画面のunload時にクリアする対策を実施。
document.addEventListener("DOMContentLoaded",function(){
		window.addEventListener("beforeunload",function(){
			window.name='';
		});
	});
コンテンツのロード後に有効にしないと、reloadとunloadがトグル で動作し画面がフラッシュして表示されない為、DOMContentLoadedで ロード完了後に有効になるようにしている。 4.IEでリロードしないとIEで動作しない問題について、IEでは一度ロードすると キャッシュされて、2回目からloadイベントが発生しないのが原因と判明。 HTML5.jpの情報を元にloadした画像のURLに時間情報を指定して強制的に imgをloadする様に変更。
window.addEventListener("DOMContentLoaded",function(){
    var canvas=document.getElementById('ripple');
    if(!canvas || !canvas.getContext){
        return false;
    }
    var context=canvas.getContext('2d');
    img.src='image/rose.jpg?'+ new Date().getTime();
    img.onload = function(){
        //var canvas=document.getElementById('ripple');
        //var context = canvas.getContext('2d');
        w = img.width;
        h = img.height;
        canvas.width = w;
        canvas.height = h;
        context.drawImage(img,0,0);
        var srcData = context.getImageData(0,0,w,h);
        pt=h;
        
        var dspripple=function(){
            var dstData = context.createImageData(w,h);
            var src = srcData.data;
            var dst = dstData.data;
            
            movImage(src,dst);
            context.putImageData(dstData,0,0);
            pt=pt-sp;
            if(pt<=0) pt=h;
            
            setTimeout(dspripple,100);
        };
        dspripple();
    };  
});
これによりIEで画面を終了せずにブラウザの閉じるで終了 した場合に、再読み込み出来なかった現象も解消される。 5.【画像処理】のパラメータテスト用画面を作成した最に FormでのButtonクリック動作イベントがIEでは正常に動作したが、 Chromeではイベントが発生しない。 onclickをonClickに変更したら動作するようになった。
<input type="button" id="btn1" onClick="setlen();" value="57>	
Chromeでは過去に問題があったとの報告があるが、現状何故なのかは 不明。 ただしここでサーバーにアップしてローカルでテストしたところ、インラインスクリプト の実行エラーがChromeで発生した。 nonce属性を使用すれば良いようだが、面倒なので外部外部jsで実行する様に変更。
document.getElementById('btn1').addEventListener('click',function(){
        setlen();
    });
これで何とか動作するようになった。