Neo Inspiration

Avatar

中の人:jakkrokk (HN統一しました) がphp,javascript,air,flex などなど好き勝手書いてます。仕事は主にWEBシステムの設計と開発、SEO全般など。

Adobeに登録されました!

Air-Seo ScouterをAdobeのディレクトリに登録したら
登録できました!

http://adobe-ria.jp/air/science_technology/

—-

話かわってAirの技術的なメモというかなんというか
ぐぐって出てくるサイトは大抵Flexとかで、
自分みたいにJavascriptで書いてる人はAir界隈では
マイナー組みなのかなぁと思いつつ
クリップボードの部分とかのお話。

ダブルクリックでクリップボードのデータをペーストする

Seo Scouterでの実装はこんなかんじ

$("#result")
    .dblclick(function () {
        var g = air.Clipboard.generalClipboard;
        if (g.hasFormat(air.ClipboardFormats.TEXT_FORMAT)) {
            $("#url").val(g.getData(air.ClipboardFormats.TEXT_FORMAT));
            start();
        } else {
        }
    });

やってることは簡単で、
air.Clipboard.generalClipboard オブジェクトに
TEXT_FORMAT があるかどうかをチェックして
あったらそれを #url のテキストボックスにいれて、 start() のfunctionを実行するというもの

実際にはテキストフォーマット以外にも
http://help.adobe.com/ja_JP/AIR/1.5/jslr/index.html?flash/desktop/Clipboard.html&all-classes.html

BITMAP_FORMAT: BitmapData オブジェクト(AIR のみ)
FILE_LIST_FORMAT:File オブジェクトの配列(AIR のみ)
HTML_FORMAT: HTML 形式のストリングデータ
TEXT_FORMAT: ストリングデータ
RICH_TEXT_FORMAT:リッチテキストフォーマットデータを含む ByteArray
URL_FORMAT:URL ストリング(AIR のみ)


といろいろあるんだけど、 AIRのみ っていうやつは
おそらくAIR間でのやり取りにしか使えないデータっぽい

ので、HTMLからとってくるデータにURL_FORMATを付き合わせても falseになってしまうので、
TEXT_FORMATで取得するしかない。
とりあえず理由は違うみたいだけど、URL_FORMATだとFalseになるので
TEXT_FORMATでやってます。

でもって、それはあらゆるテキストフォーマットがOKってことなので、
それをURLかどうかをヴァリデートする必要があると。

結局

結局うだうだ説明かかれるより
ソースみたほうが理解が早いなって 最近ほんとおもう。。

36進数

36進数を新しいサービスで使おうと思って
作ってたわけです。
いや 思いついたら面白くなってしまったというオチなんですが。

こんなかんじで。

function decodeDec36($decimal='') {
    if (preg_match('/^[0-9a-z]+$/',$decimal)) {
        $stack = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

        $dec35 = 0;
        $len = strlen($decimal);
        for ($i=1; $i<=$len; $i++) {
            $tmpDec = array_search(substr($decimal,-$i,1),$stack,true);
            $dec35 += (int) $tmpDec * pow(36,$i - 1);
        }
        return $dec35;
    } else {
        return false;
    }
}

function encodeDec36($number='') {
    if (is_numeric($number)) {
        $stack = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

        $enc35 = '';
        $tempEnc = array();
        while (($floor = floor((int) $number / 36)) != 0) {
            $tempEnc[] = $number % 36;
            $number = $floor;
        }
        $tempEnc[] = $number;

        $tempEnc = array_reverse($tempEnc);
        foreach ($tempEnc as $k=>$v) {
            $enc35 .= $stack[$v];
        }
        return $enc35;
    } else {
        return false;
    }
}

反省はしてない。

と勢いで作っていたらふと javascript の toString(36) を思い出した。

あれってPHPでねえのとおもったらあった・・・

$encoded = base_convert($number,10,36); //10進数の$numberを36進数に変換

無知って罪だ。
やっぱり反省します。

FirefoxとIEでヤフカテのリンクが違う件

こんなエントリーがあったので
YahooカテゴリのリンクがIEとfirefoxでは違う
調べてみた。

状況確認

IEでみると
<a href=”http://www.searchengineoptimization.jp/” onmousedown=”return catrd(this,’&l=SIT&sid=2077584930&ssid=2076957840&loc=1&sig=1c4257cfbecbbc422d0d69bb26b0eac8&rd=’,”,’site’);”>SEO検索エンジン最適化</a>

Firefoxでみると
<a onmousedown=”" href=”http://dir.yahoo.co.jp/proc/?m=redir&l=SIT&sid=2077584930&ssid=2076957840&loc=1&sig=1c4257cfbecbbc422d0d69bb26b0eac8&rd=http%3A%2F%2Fwww.searchengineoptimization.jp%2F”>SEO検索エンジン最適化</a>

おお確かに違う

でもそういや似たようなこと俺もやったな。。

onmousedown って確か Javascriptの挙動の違いがあったきがしたなぁ。。
と思い出したんで、ちょっとテストしてみました。

このページでIEとFirefoxで 右クリックしてみてください。
テストページ

あれれ?

そう Firefoxだと右クリで javascript が反応してないですね。;

ようはブラウザによってjavascript の挙動が違うので正確なクリックカウントができないじゃんということなんでしょうね。。
たぶん本当なら統一したほうがいいので、 firefoxバージョンでやるのがいいんだけど
SEOの効果がないとヤフカテが売りあげに影響がある・・

なんてことだったりしたら面白いですね!

というわけで、意図的にプログラム側で書き分けているっていうのが結論です。

おまけ

ちなみに 選択した部分のソースを表示ってやるのと、CTRL+U押すのとで、
結果が変わるのは、Firefoxの仕様で
取得したHTMLをDOMツリーに展開した後でその部分のソースを見てるからだそうです。
(CTRL+Uを押した時はDOMツリーに展開前のソースを表示させているということですね)

Continue Previous page Next page

Twitter