ホーム > タグ > javascript

javascript

【CSS】iPadだけにCSSを適用する方法

結論から言うとjavascriptでUserAgentを参照して振り分けるしかない。

linkやcss内の@mediaでどうにかなるもんだと思ってましたが。

<link rel="stylesheet" media="only screen and (max-device-width: 1024px)" href="../ipad.css" type="text/css" />

どうやら↑では”iPadオンリー”は無理です。
結局UserAgentを見るしかない。

var iPad = /iPad/.test(navigator.userAgent);
if(iPad){
//iPadだけに適用させたい記述
}

 
長くなるので無理な理由、検証、iPadだけにcssを適用させるjsは以下に。

 

Continue reading

Node was not found” code: “8

swfobject2.2を使っているときに
windows firefox3.5.8の環境化においてFirebugが以下のエラーをはく(自分の環境だけかもしれませんが)
Node was not found” code: “8

たいした説明は出来ませんが非圧縮版の193行目付近が問題っぽい。
元のswfobject

	function testPlayerVersion() {
		var b = doc.getElementsByTagName("body")[0];
		var o = createElement(OBJECT);
		o.setAttribute("type", FLASH_MIME_TYPE);
		var t = b.appendChild(o);
		if (t) {
			var counter = 0;
			(function(){
				if (typeof t.GetVariable != UNDEF) {
					var d = t.GetVariable("$version");
					if (d) {
						d = d.split(" ")[1].split(",");
						ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
					}
				}
				else if (counter < 10) {
					counter++;
					setTimeout(arguments.callee, 10);
					return;
				}
				b.removeChild(o);
				t = null;
				matchVersions();
			})();
		}
		else {
			matchVersions();
		}
	}

これの

b.removeChild(o);

でなぜかノードがねえすwwwってなってるので改造。
改変したswfobject

	function testPlayerVersion() {
		var b = doc.getElementsByTagName("body")[0];
		var o = createElement(OBJECT);
		o.setAttribute("id", FLASH_DUMMY_ID);
		o.setAttribute("type", FLASH_MIME_TYPE);
		var t = b.appendChild(o);
		if (t) {
			var counter = 0;
			(function(){
				if (typeof t.GetVariable != UNDEF) {
					var d = t.GetVariable("$version");
					if (d) {
						d = d.split(" ")[1].split(",");
						ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
					}
				}
				else if (counter < 10) {
					counter++;
					setTimeout(arguments.callee, 10);
					return;
				}
				b.removeChild(doc.getElementById(FLASH_DUMMY_ID));
				t = null;
				matchVersions();
			})();
		}
		else {
			matchVersions();
		}
	}

idをつけて、getElementByIdで直接指定してリムーブ。
ちなみにFLASH_DUMMY_IDは頭のほうで変数追加
元のswfobject

	var UNDEF = "undefined",
		OBJECT = "object",
		SHOCKWAVE_FLASH = "Shockwave Flash",
		SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
		FLASH_MIME_TYPE = "application/x-shockwave-flash",

改変したswfobject

	var UNDEF = "undefined",
		OBJECT = "object",
		SHOCKWAVE_FLASH = "Shockwave Flash",
		SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
		FLASH_MIME_TYPE = "application/x-shockwave-flash",
		FLASH_DUMMY_ID = "SWFObjectDummy",

これで動くようにはなった。

【javascript】「。」を「(キリッ 」に置換するブックマークレット

「ツイート」を「ツイート(笑)」に置換するブックマークレット というものがあるので
http://d.hatena.ne.jp/amachang/20091105/1257399754
を改造して。

javascript:var d=document,r=d.evaluate('//text() [contains(.,"。")]',d,null,7,null),i=0;while(d=r.snapshotItem(i++))d.data=d.data.replace(/。/g,'(キリッ ');void(0);

できた(キリッ

Xpathを覚えよう。
https://developer.mozilla.org/ja/Introduction_to_using_XPath_in_JavaScript

【javascript】現在が朝昼夕晩のいつかを求める

指定した時間になったら指定した背景を替えるjavascriptを作っていて。
朝:5時から8時 5以上8以下
昼:9時から16時   9以上19以下
夕:17時から20時  17以上20以下
晩:21時から4時   21以上4以下
と時間を決めてコードを書いて。分岐文を書く際にいろいろ試行錯誤しているのでメモ

var date = new Date(),
 h = date.getHours(),
 n = '';

ここまでは共通。サーバータイムとるほどの仕組みでもないのでローカルタイム。しかも分秒は気にしない。

if文を使った分岐

if(h>=5 && h<=8){            //5-8
   n = "morning";
 }else if(h>=9 && h<=16){     //9-16
   n = "noon";
 }else if(h>=17 && h<=20){    //17-20
   n = "evening";
 }else{                       //21-4
   n = "night";
 }

三項演算子を使った分岐

n = (h>=5 && h<=8)?  "morning" :
      (h>=9 && h<=16)? "noon":
      (h>=17 && h<=20)?"evening":"night";

見やすいしすっきりしたからこれかなぁ。なんとなく不安が残るけども。

うのくんが考えた別のアプローチの仕方

うのくん
hを4で割って切り上げ
5時から8時 切り上げで2
9時から16時    切り上げで3,4
17時から20時   切り上げで5
21時から24時    切り上げで6
0時から4時     切り上げで1
こうだね
n = nn[Math.ceil(h/4)-1];
なのでこうだね

var nn = ["night", "morning", "noon", "noon", "evening", "night"];
  n = nn[Math.ceil(h/4)-1];

おお。。短い。
変数増えたり、マジックナンバー使ってるあたりがネックなので
ごめんね今回は不採用。
ただ同じ結果でも別の書き方を見ると感激するなぁ。うむうむ。

Home > Tags > javascript

Search
Feeds
Ads
Link
Meta

Return to page top