flandlescarlet's diary【情報工学生の備忘録】

元機械工学科所属だった情報工学生です。JavaScriptで適当に何かを作ったり、絵を描いていたりします。

HTML5タグの許可についてフィードバックしました

未だに自由に使えないcanvassvg

はてなblogの特徴としてJavaScriptの解禁と同時にHTML5の解禁も行われたわけですが

未だにcanvassvgを使うと効果が消える、いわゆる無かった事にされますね。

現在のHTML5対応としては主にform関係のタグが使用できるようです。

使用できないタグと出来るタグが混合しているので対応を要求しました。

 

使用できない及び効果が反映されない要素:GUI関係のみ

  • audio
  • video
  • canvas
  • svg
  • meter
  • details
  • summary
  • mark
  • figure
  • figcaption

 

使用が確認できたGUIに関係する要素

formに一番対応しているブラウザはOperaです。

 

color:
range:
url:
detatime:
number:

今流行りのやさしさゴシックをはてなブログに適応させる

やさしさゴシックフォントのブログ製作

cssのfont-familyプロパティで、文字の装飾を行うことができますが、基本的にクライアント側に適応させるフォントを「ダウンロードさせている」を条件に動いているため、万が一フォントに対応していない場合はユーザビリティは損なわないものの、font装飾を施した意味がなくなってしまいます。

今回はcssで使える@規則というものを使ってフォントを適応させていない(いわば新しく作られたフォントなど)をクライアントに読み込ませて、適応させるという方法をとります。

やさしさゴシックの使用に制限はありませんので、各自アップローダにttf(TrueTypwFont)ファイルをアップロードさせて直リンクさせてください。

やさしさゴシック提供サイト

http://www.fontna.com/blog/379/

サイトをスクロールさせていくとダウンロードする画像アイコンが見つかりますので適当に保存してください。

ダウンロードされたファイルのうちルート直下にある 07やさしさゴシック.ttf を Yasasisa.ttf などと日本語を英数字に変えてください、基本的にアップロードできる名称に変えてもらえればOKです。

 

Sample1

@font-face{ /* @ルールフォントを指定*/
font-family: "Yasasisa"; /* 適当なフォント名を付ける、他のフォント名を重ねない*/ src: url(http://yatagarasu0495.web.fc2.com/css/font/yasasisaGothic.ttf); /* ttfファイルのリンクを貼る */
} body{
font-family: "Yasasisa"; /* 通常のfont-familyで追加した適当なフォント名を指定する*/
}

基本的にはこれで適応されますが、注意として body セレクタははてなのCSS編集で既に追加してあるので、新しくbodyセレクタを追加せずに追記する形で記入しましょう。

body以外にもp要素など特定の要素だけに適応させてもいいです。

ただフォント名に日本語を使うと、仕様かは分かりませんが、はてなのスタイルシートが全部崩れるのでその辺は気をつけてください。

(普通のテキストエディタで編集する分には問題無い)

(このブログのフォントもやさしさゴシックを使用してます)

JavaScriptでアラートダイアログを改装する

alert()を直接使わずにdivにスタイルを適応させて製作する

今回はJavaScriptでお馴染みの第一歩であり、デバッグ用に使われるalertメソッドですが

見た目が予想以上に殺風景ですので(特にfirefox)独自作成してみました。

alertを装飾するjQueryライブラリはいくつかあるので先に紹介しておきます。

実装は以下の通りです。

IE未対応

http://yatagarasu0495.web.fc2.com/javascript/blog/alert/01.html

createElementappendChildで要素を挿入し、削除にはremoveChildを使っています。

基本的にスタイルシートdisplay:none;が使えそうな気もしますが、あえてソースに無駄なコードを増やさないために(display:noneを使うと画面上要素は消えるがソースは取り残される)

追加と削除を繰り返す形で実装しました。

JavaScriptでDOMを操作するとき$セレクタ(jQuery)の利用も便利

DOMのもうひとつの見方

JavaScriptにはDOMの概念でhtmlのツリー構造に当たる隅々の要素までアクセス出来る仕組みがあります。用いられる書き方として

Sample1

 document.getElementById("id名"); //値
document.getElementsByTagName("タグ名"); //配列
document.getElementsByName("name名"); //配列
document.getElementsByClassName("class名"); //配列

主に代表的に使われる要素の取り出しとして容易されているものですが、比較的に記述が長い上にid以外は配列で取り出さなければならないという煩わしさがあります。

基本的にclass名やタグ名の全部の要素を取り出して値等を変更するにはfor文でループさせれば良いわけですがこれも煩わしさの一つとなります。

Sample2

 for( i=0 ; i < element.length ; i++){

document.getElementsByTagName("h1")[i].style.color = "#F00";
//h1要素の文字を全て赤字にする

}

そこで使えるのが$セレクタです。

基本的に$セレクタjQueryで頻繁に出てくるというか、$セレクタで動くのがjQueryですので当たり前と言えば当たり前ですが、これをJavaScriptのDOMに結びつけると比較的容易に要素を操作することが出来ます。

<script
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"
type="text/JavaScript"
></script> //jQueryURL


<script type="text/javascript">
$(function() {
$('.test').append("何か"); //要素の追加
});
</script>

DOMの操作で要素の追加というものがありますが、jQueryの$セレクタを使えば容易に行うことが出来ます。

基本的にこのソースの場合class名がtestである要素全てに効果を適応させる事ができます。

これにより無駄にforでソースを回す必要もなくなります。

最初の無名関数を$セレクタで囲ってあるのはJavaScriptでいうwindow.onload = function(){}と同じ意味合いです。

ロードをし終えた後にスクリプトを読み込むので先にスクリプトを読み込んでしまってgetElementById is defindみたいなバグを抑える事も出来ます。

jQueryはただライブラリとしての実用だけでなく、JavaScriptの構文を容易にする面もありますので使ってみると良いかもしれません。

PHPで簡易ログインサイト

ログイン者とログアウト者で振り分ける

よくわかるPHPの教科書を読み始めて3日ほどになりますが、実際にサイトを製作してみました。

 

http://www35.atpages.jp/~flandlescarlet/php/login/loginhome.php

基本的にログインしていない状態でメインのサイトを見ようとすると

ログアウトしてくださいと注意を促します。

また今回はデータを二つ用意して二人の会員を予め用意してみました。

(mySQLがまだまだ初心者状態なため会員登録ができるところまでは作成できませんでしたが)

 

ちなみにログイン用のアカウントは

ID : hatena

Pass : 12345

 

ID : flan

Pass : 0495

PHPを本格的に始め思った事

グローバル変数利用の違いを見極める必要性

基本的にPHPJavaScriptで決定的に違う内容として

コンテンツの書き込みがあります。JavaScriptはセキュリティのためにCookie以外での直接的なデータの保存や書き込みはできないものです。

PHPJavaScriptに比べて予め用意された関数が多いように感じました。結果的にPHPにはDOMやイベント関係の要素が抜けるので大半は必要に応じて関数を調べるといった感じになると思います。(触りを見ての意見)

PHPで今回扱ったグローバル変数$_FILES,$_POST,$_GET,$SESSION,$COOKIE,$REQUEST

基本的にどのグローバル変数でも常にセキュリティの意識と向かい合わせになっています。

グローバル変数の注意についてまとめてみました。

$_GET

フォームのメソッドをgetにすることで得られるグローバル変数。送信時に?(プロパティ)の後ろにvalue値が追加される仕組みとなっている。

良点としては結果がURLに現れるのでブックマークしておける

欠点としては暗号等重要な送信内容の時はデータが筒抜けになるので適応してはいけない、また短いデータしか活用できない。

 

$_POST

フォームのメソッドをpostにすることで得られるグローバル変数、特に変化は見られない。

良点として比較的長い文章でも送信が可能になる。

 

$_SESSION

$_GET及び$_POSTの値を代入する事で一時的にデータを保存する事ができるグローバル変数。効果はWebページが閉じられるまで続く。

良点として、ログイン関係等、うっかりログアウトすることを忘れてしまってもWebページを閉じると同時に自動的にsessionデータも消えるのでセキュリティの面で良い

欠点としてWebを閉じる事でデータが消えてしまうため長期に渡るデータの保管ができない。

 

$_COOKIE

setcookie("Cookie名" , "保存するCookieの変数や値" , "保存期間") により設定してデータを補完するグローバル変数

良点として自由自在に値の保管を決められるため自由性が高い。

欠点として一定期間保存するため、ログイン関係での日付調整が必要となる。

 

$_FILES

フォームのメソッド値をpostにしてグローバル変数が得られる(連想配列式)

良点としてファイルを受信できるので需要度が比較的高まる。

欠点として得られるファイルの情報がわからないので厳密に分岐して安全なファイルを得られるようにソースを記述しなければならない(ファイルのサイズに拡張子等)

 

ざっと見た感じ、PHPはデータ処理系が多くそれで一塊な感じがしました。

関数もJavaScriptと類似するものとして(rand , substr , math系)関数に関しては多量にあるので必要な情報だけ調べて得るのが正解かなと思いました。

JavaScriptイベントの種類

JavaScriptで扱うイベントをまとめてみる

  • onabort              : 読み込みを中断した時
  • onblur                : 要素がフォーカスを失った時
  • oncanplay           : 再生が可能になった時
  • oncanplaythough : 再生が途切れない状態になった時
  • onchange            : 属性の値が変わった時
  • onclick               : クリックされた時
  • oncontextmenu   : 右クリックされた時
  • oncuechange       : テキストトラックキューが変化した時
  • ondblclick           : ダブルクリックされた時
  • ondrag                : ドラッグ中の時
  • ondragend           : ドラッグが終了した時
  • ondragleave        : ドラッグ可能なオブジェクトから離れた時
  • ondragover         : ドラッグ可能なオブジェクトに重なっている時
  • ondragstart         : ドラッグが開始された時
  • ondrop               : ドロップされた時
  • ondurationchange: メディアの長さが変わった時
  • onemptied          : 再生中にネットワークが利用不可となった時
  • onended              : メディアの最後に到達した時
  • onerror               : ファイル読み込み中にエラーが起きた時
  • onfocus               : フォーカスされた時
  • onformchange      : フォームに変化があった時
  • onforminput         : フォームにユーザーが入力した時
  • oninput                : フォームの要素にユーザーが入力した時
  • oninvalid             : フォームの要素の値が不正になった時
  • onkedown            : キーが押された時
  • onkeypress           : キーが押されて離された時
  • onkeyup               : キーが離された時
  • onload                 : 読み込みが終了した時
  • onloadeddata       : メディアのデータの読み込みが終わっっ時
  • onloadstart          : メディアの読み込みが始まった時
  • onmousedown      : マウスのボタンが押された時
  • onmousemove      : マウスポインタが移動した時
  • onmouseout         : マウスポインタが要素から離れた時
  • onmouseover       : マウスポインタが要素に入った時
  • onmouseup          : マウスのボタンが離された時
  • onmousewheel     : マウスのホイールが回された時
  • onpause               : メディアの再生が一時停止した時
  • onplay                 : メディアの再生の準備が出来た時
  • onplaying             : メディアの再生が始まっている時
  • onprogress           : メディアのデータを処理している時
  • onratechange       : 再生レートが変化した時
  • onreset                : フォームがリセットされた時
  • onresize              : ウインドウの幅が変化した時
  • onscroll                : スクロールバーが操作された時
  • onseeked             : メディアの頭出しが終わった時
  • onseeking             : メディアの頭出しが始まった時
  • onselect               : 要素がセレクトされた時
  • onshow                : 表示されるとき
  • onstalled              : メディアデータの読み込みができなくなった時
  • onsubmit              : フォームの送信ボタンが押された時
  • onsuspend             : メディアデータの読み込みが止まった時
  • ontimeupdate       : 再生位置が変化した時
  • onvolumechange   : ボリュームが変化した時
  • onwaiting             : 再生が一時中断した時