jQueryのcssで何がなんでもstyle=”xxx”を効かせる

jQeuryで

$(“xxx”).css(“background-color”, “red”);

なんてやってcssを適用させたいときにcssの構造なんかの問題で、どうしてもうまくキマらない時がある。

普通にcssを書く場合なら!importantという最上級の優先ルールを使って適用する事も可能なんだけど、

jQueryの場合は下記のように記述する事で直接的な!importantルールが使えるようになる。

$("xxx").css('cssText', 'background-color:red !important;');


htmlを作ってくれるデザイナーさんによってcssの構造が違う事はよくあり、それをいちいち解析するのにも時間を大きく消費してしまう場合もあるので

若干強引ながらこういったやり方も知っておくと色々と捗る。

【AmazonAPIの仕様変更】リクエストには、必要なパラメータが含まれていません。必要なパラメータには、AssociateTagなどがあります。

運営しているサイトにてある日突然AmazonAPIで取得しているアフィリエイトリンクが出なくなってしまった。

これまで安定して動いていたのにある日突然だったので、

「うん?Amazonの調子が悪いのか?それともレンサバのcrontabでも狂ったのか?」

としばらく放置していた。

まあAmazon広告が出なくなったからといってサイトが動かなくなる訳じゃないしね。

が、何日たっても一向に治る気配がない。

やれやれとログを見てみるとこんなエラーが・・・

リクエストには、必要なパラメータが含まれていません。必要なパラメータには、AssociateTagなどがあります。


ん?んん???

どうやらAmazonAPIの仕様変更があって

「AssociateTag」

というパラメータが追加になったらしい。

しかも必須かよオイ・・・・

アフィリエイトIDを指定してやれば良いだけなので修正はすぐ何とかなったけれども。

これがカテゴリーやノードに関わってて何か調べごとが必要なパラメータとかだったら涙目になってたかもしれない。

そういえば、Amazonのデベロッパー向けメールに何か来ていたのかもしれない。

でも基本アメリカ語は良く分からないのでメールは来ていたけど無意識にスルーしてたぽい。

でもアレって頻繁にメール来るから思わずスルー安定になっちゃう罠。

ああいや、たまにしかメール来なかったとしてもスルーするな自分は。

間違いない。自身ある。

でも、てっきりこうゆのって「Version」パラメータで呼び出すAPIのバージョンをクライアント側が指定できるもんだと思ってた。

要はそんなものに甘えるなと、

そういう事ですね。

PHPでPOSTから取得したセッションIDでセッションを開始する

FlashのFileReferenceを使ったアップローダを作っていたところ

IE以外のブラウザではCookieが送信されない問題にぶち当たった。

そこで、CookieのデータをPOSTで送信してしまい、PHP側で無理矢理そのデータをsession_idとして認識できないかな?

と勘でやってみたところ、何故かうまくいってしまった。

ありがとうPHP。
$cookies = $_POST["cookie"];
$session_id = null;

foreach (mb_split(";", $cookies) as $cookie) {

$cookie = trim($cookie);

$arr = mb_split("=", $cookie); if (count($arr) != 2) continue;

if (session_name() == $arr[0]) { $session_id = trim($arr[1]); }

}

$_COOKIE[session_name()] = $session_id;

ini_set("session.gc_probability", なんか数値); ini_set("session.gc_divisor", なんか数値); ini_set("session.gc_maxlifetime", なんか数値); session_start();

これで正常にセッションが開始できた。

Flash側からはExternalInterfaceでJavascriptから

document.cookie

の値を取得して、それをPOSTしてやる。

document.cookie

の内容は、全てのCookieの値が連結された文字列なので、それをPHP側でsplit処理して解析してやり、

$_COOKIE[session_name()] = セッションID

としてやる事でPHPではクッキー内にセッションIDが入っていると認識してくれるらしい。

この

$_COOKIE[session_name()] = セッションID

が正直驚きだった。

事前にsetcookie()関数を呼び出すようなクッションページをかまさないと認識してくれないかと心配していたが、すんなりうまくいってしまった。

ちなみにFlash側のソースは以下
var _cookie = ExternalInterface.call("getCookie");	// javascriptで return document.cookie; をする関数を作成しておく

var req:URLRequest = new URLRequest(url); // req.requestHeaders.push(new URLRequestHeader("Cookie", _cookie)); // ↑これが使えれば一番良かったけど、FlashPlayerのセキュリティエラーになるので使えない

var variables:URLVariables = new URLVariables(); variables.cookie = _cookie; req.data = variables; req.method = "POST";

// アップロード fileReference.upload(req);

Flashは素晴らしいUIが作れるものの、色々と制限やら実装抜けやら多いので苦労が絶えない。

レンタルサーバからメール送信した際にgmailで受信しない

レンタルサーバ稼動で、PHPからmb_send_mailするプログラムというのは定番かと思うけど

まれにgmailに対し送信した際に受信してくれない場合がある。

実際に体験したケースとしては、さくらレンタルサーバのスタンダードプランやVPSを利用していて、サイト上のPHPからメール送信

⇒Yahooメールには届くけれども、gmailには届いてくれない。

といったケース。

迷惑メールに分類される分にはまだいいんだけれども、gmail側が一切受信をしてくれないケースもある。

おそらく、サーバに同居している別ユーザがスパム送信などを行って(もしくは乗っ取られてスパムプログラムが動作して)gmailに大量にメールを送信しており

gmail側から「このサーバはスパムなのでメール受信しない」と判定されてしまっているのだと思う。

Yahooメールなど、他のwebメールに比べgmailはこの辺はかなり厳しい印象。

こうなってしまったら基本的には、こちら側はどうする事もできない。

とはいえ、ユーザ会員登録などでメール内に登録キー付きURLを仕込むような仕組みのサイトの場合、かなり致命的な問題となってしまう。

安プランなどで運営している場合は、サーバを移設してIPを変えてやるのが最も手っ取り早い対処となる。

もしくは経験上、数日から数十日ほど放置していると、突然なおったりもする。

段階としては、迷惑送信が停止してから数日から数十日のスパンで

・メール受信自体を拒否が解除

・迷惑メールに分類される事が解除

・通常メールに分類される

といったプロセスで状況が改善されていくらしい。

この辺はgmailのアルゴリズムによる所。

安プランのサーバは手軽な分、変な業者が同居している可能性も高まるので

なかなか判断も難しい所。

予算がある&確実なメール送信を求められているのならメール送信サービスなどを利用するのが間違いなさそう。

でもけっこう高いんだよなぁ・・

SVNでディレクトリを完全削除【Windows】

ローカルWindows環境でsvnを使っているんだけど、間違って1G近いファイルをsvnにコミットしてしまった。

で、単純にdeleteするだけでは履歴が残ったままで何の解決にもならないので、完全にディスク上から削除する方法をメモ。

まずDOS窓から以下のようなコマンドを打つ。

svnadmin dump 【svnディレクトリ】 | svndumpfilter exclude 【消したいsvnパス】 > 【適当なファイル名】
【svnディレクトリ】には、c:\svnなどのディレクトリ名。

【消したいsvnパス】には、/missproject といったようにsvn上のパス

【適当なファイル名】は何でも良い。c:\dumpとでもしておく。

すると、【適当なファイル名】にdumpファイル(バックアップファイル)が出力される。

このファイル内には【消したいsvnパス】で指定したパスに該当するファイル達は既に除外されている。

次に【svnディレクトリ】をディレクトリごと削除、もしくはディレクトリ名を適当な名前に変更する。

で、最後に新しくsvnディレクトリをcreateし、dumpファイルをインポートさせればOK

svnadmin create 【svnディレクトリ】
svnadmin load 【svnディレクトリ】 < c:\dump

要はリポジトリを作り直すって事ね。

ちょっと面倒くさい。

Facebookのiframeページでスクロールを非表示に

なかなかうまくいかなくて、ようやく間違いのなさそうなやり方に至ったのでメモ。

まずはcssでbodyに対して「スクロール出すなよ!?絶対出すなよ!?」と書きます。

body {
	overflow-x: hidden;
	overflow-y: hidden;
}


次に、以下のスクリプトをbodyタグ開始の直後に記述します。

細かくはよくわかりません。深く考えない事が大切です。
<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script> 
<div id="fb-root"></div> 
<script> 
$(function(){
	var pageHeight = $(document).height();
	FB.Canvas.setSize({ height: pageHeight });
	FB.init({   
	    appId  : '【開発者ページで入手できるアプリID】',
	    status : true, // check login status
	    cookie : true, // enable cookies
	    xfbml  : true,  // parse XFBML
	    logging : true
	});
	FB.Canvas.setAutoResize();
})
</script>


これで憎きスクロールバーは一切でなくなるはずです。

Firefox4でLiveHttpHeadersのかわりにhttpステータスをトレース

昔から愛用していたFirefoxでHttpステータスをトレースしてくれるLiveHttpHeadersプラグインなんだけど、Firefox4にインストールしてみたら、なんぞやきちんと動いてくれなかった。

で、調べてみたらFirefoxには便利な機能が標準搭載されているとの事。

ウィンドウ左上のFirefoxボタン⇒Web開発⇒Webコンソール

と開くと、以下のような感じでHttpステータスがトレースされるようになる。

firefox webコンソール

いいねー。

そしてLiveHttpHeadersさようなら

これまでありがとう

【MySQL】Column ‘xxx’ specified twice

MySQLにてこんなエラーが出てしまった場合の原因は

updateやinsertを行う際にカラムの指定が複数存在してしまっているとき。

例えば

insert into xxx set col_a = 'AAA', col_b = 'BBB', col_a = 'CCC'
こんなときに出る。

【DOS】日付名でフォルダを作成できるバッチ

出先の別PCで使いたくなる時があるのでメモ

下記コマンドを

適当な名前.bat

で保存

cd /d %0\..
md %DATE:/=%_%TIME::=%


ダブルクリック起動で.batファイルを設置したフォルダ内にフォルダが作成される。

そこはかとなく便利

【Facebookエラー】この操作を実行するには、アカウントの認証を完了する必要があります。



Facebookアプリ開発をはじめるべくググりを繰り返して何とかデベロッパー登録してみた。

まずはデベロッパーページからアカウント登録が必要との事。

https://www.facebook.com/developers/

で、ここで軽くつまずいた。
この操作を実行するには、アカウントの認証を完了する必要があります。携帯電話またはcredit cardを追加してアカウント認証を行ってください。
こんな壁にブチ当たってしまった。

» 続きを読む…

管理人運営サイト
<技術情報サイト:PGBox>
PGBOX