1  |  2  |  3  |  4  | All pages

スクロールバーとかOperaとか

[2008.08.12 22:17]

久々にJSをごりごり使ってハマったメモ。
jQueryとか便利ですね。

1. FireFoxでhtmlにオーバーレイしたFlashのボタンが押せなくなる
htmlにFlashをオーバーレイさせた上で、scrollbarをhiddenにすると、Flashのボタンが非常に押しづらくなる。
window.open()でスクロールバーなしで開いた場合や、そもそもスクロールバーが出ない場合は問題なし。

2. Safariはスクロールバーがないと、scrollのイベントが取得できない。
(jQueryの$(window).scroll() 使ってるから?)

3. OperaはjQueryのScrollToライブラリでスクロールしない
指定のエレメント上でのスクロールはできるけど、$.scrollTo($('#hoge'), 1000) とかやっても動かない。

4. jQuery 1.3.3 でOpera9.5のwindowのサイズが取れない
$(window).height()とかやるとやたらでかいサイズが返る。
document.compatMode を見つつ、document.documentElement.clientWidth やら document.body.clientWidth やらを返す。
互換とか、標準とかなんかよくわからないけどメンドイ。


contributor nao : thread | comment (0)

PHPのfile()関数で読み込めない

[2006.12.24 02:49]

吐き出してるRSSを取得するのにPHPにてfile()関数を使って取得してたけどどうも取得できないサイトがある.いろいろ調べたら

[Request Header]
Accept-Encoding: gzip,deflate

[Response Header]
Content-Encoding: gzip

と圧縮したデータを送受信しているからっぽい.

そこでfsockopen()関数を使用してリクエストヘッダーにてContent-Encodingを渡さないようにした.

$req_message  = "GET /index.html HTTP/1.1 ";
$req_message .= "HOST: graffiti-web.org\r\n";
$req_message .= "\r\n";

fsockopen('graffiti-web.org', 80, $errno, $errstr, 5);
fputs($handle, $req_message);
socket_set_timeout($handle, 5);

$response = '';
while(!feof($handle)) {
		$response .= fgets($handle, 4096);
}

header('Content-type: text/plain');
print $response;
fclose ($handle);

これってPHPの設定かなんかでfile()関数でもできるのかな?


contributor nao : thread | comment (2)

JSで自分自身が属するscript要素を取得

[2006.12.02 14:00]

以前書いたJSの呼び出しているGETのクエリーを取り出す方法で書いたときに自身のスクリプトタグはgetElementById()を使用して使っていたけど,いい方法見つけた.

IT戦記 | とてもシンプルに自分自身が属する script 要素を取得

んー,なるほどー.


contributor nao : thread | comment (0)

JSの呼び出しているGETのクエリーを取り出す方法

[2006.11.26 03:04]

jsファイルにおいて

<script src="~.js?id=100" />

と埋め込んでいるid=100って取れないなーと思っていたらZ氏に解決策の方法を聞くことができました.m(_ _)m

var scriptsTag = document.getElementById('idname');
var srcAttr = scriptsTag.getAttribute('src');
var id = srcAttr.split('?')[1].split('id=')[1];
alert(id);

なるほどー!


contributor nao : thread | comment (2)

lojaxを使ったWhat's New

[2006.11.14 16:52]

AJAXでWhat's Newを再度作ってみた.
前回のと違って今回はLoJAX (Low-technology AJAX)を使用して作ってみた.
LoJAX What's New

といっても,responseTextをdivタグのしたに流し込んでいるだけなのであれですが,MacIE5.xでは文字化けしちゃいます...
なんでだろう...
そもそもLoJAXを使用してデータが取れるのはいいんだけど,MacIE5ではresponseXMLとしてDOMが確立されてなくresponseTextにテキストが入っただけの状態で返ってくるのでDOMのメソッドを用いたデータの取得ができない...
となると正規表現とかで取得するとかでしょうか?
でも,そもそも文字化けしてるし...
あきらめるしかないかな…?

/**
* 読み込むことでBlogの最新記事とTOPICSを指定のオブジェクトへ表示させる
* <code>showTopics()</code>メソッドを提供する.
* {@link http://www.brothercake.com/site/resources/scripts/lojax/ lojax}を使用して
* Mac IE5以降でも動作するように実装したがなぜか文字化けを起こす...
* 
* @link    http://www.brothercake.com/site/resources/scripts/lojax/
* @usage  <pre>
*         <body onload="javascript:showTopics();">
*         </pre>
*         と,bodyタグのonloadイベントハンドラにて呼び出す.
* @author nao seto (seto@graffiti-web.org)
*/

/**
* windowオブジェクトへのエイリアス.
*
* @param  window
*/
var target = this;

/**
* TOPICSのXMLへのパス.
*
* @param  String
*/
var TOPICS_XML = 'topics.xml';

/**
* HTTP通信を行う XMLHttpRequestオブジェクト.
*/
var xmlHttpRequest;

/**
* TopicsのXMLを読み込み終わったときのイベントハンドラ.
*/
var _onLoadTopicsXML = function () {};

/**
* Topicsの表示が終わったときのイベントハンドラ.
*/
var _onInsertTopics = function () {};


/**
* Topicsをid="topics"要素の子要素としてXMLのまま表示させる.
*/
this.showNews = function() {
  target.xmlHttpRequest = target._createXMLHttpRequest();
  
  if (xmlHttpRequest == null)
    return;
  
  // 各イベントハンドラの割り当て
  this._onLoadTopicsXML = this._insertTopics;
  this._loadTopicsXML();
};

/**
* XMLHttpRequestオブジェクトを作成する.
*
* @return  XMLHttpRequest
*/
this._createXMLHttpRequest = function() {
  try {
    return new XMLHttpRequest();
  }
  catch (e) {
    try {
      return new ActiveXObject('Microsoft.XMLHTTP');
    }
    catch (e) {
      return null;
    }
  }
  
  return null;
};


/**
* TopicsのXMLを読み込みにいく.
*/
this._loadTopicsXML = function() {

  target.xmlHttpRequest.onreadystatechange = function() {
    if (target.xmlHttpRequest.readyState == 4 &&
      /^(200|304)$/.test(target.xmlHttpRequest.status.toString())) {
      target._onLoadTopicsXML(target.xmlHttpRequest.responseText);
    }
  };
  
  target.xmlHttpRequest.open('GET', target.TOPICS_XML, true);
  target.xmlHttpRequest.send(null);

};

/**
* HTMLに新着情報をXMLから書き込む.
*/
this._insertTopics = function(topics) {
  var topicsDiv = document.getElementById('topics');

  topicsDiv.appendChild(document.createTextNode(topics));
};


contributor nao : thread | comment (0) | trackback

 1  |  2  |  3  |  4  | All pages