2010
7/29

IE+SWFのSSL領域との通信時に発生するトラブルについて

とある案件でちょっとハマったので備忘録がわりにメモ。まず今回のファイル構成は以下のとおり。

fig

処理の流れとしては、

(1)main.swfからSSLサーバのcrossdomain.xmlを読み込み。
(2)main.swfからdata_output.phpにアクセスし、読み込む画像のURL一覧を記載したXMLデータを取得。
(3)(2)で取得したXMLデータをもとに、個別の画像を読み込み。

・・・という、割とよくあると言えばよくある構成です。ポイントはやっぱりSSL領域とのクロスドメイン通信があること。ドメイン名が同じでも、非SSLのサーバとSSLサーバとでは別ドメインと判断されるんですよね。

で、一通り作ってサーバにアップしたところ、FirefoxやChromeやSafariでは動くのになぜかIEだけ画像が表示されない!crossdomain.xmlはきちんと記述できてるし、XMLデータを非SSL側のサーバに設置すればIEでも動くので、どこで止まってるんだろうと調べたところ、(2)のXMLデータ取得のところでポシャってることが判明。で、Google先生に尋ねて出てきたのが以下の記事:

つまりこれはIEに起因する問題で、非SSL領域のSWF(に限らず、Ajax通信などでも同じでしょう)からSSL領域のデータをリクエストした際、サーバからのレスポンスヘッダにPragma: no-cacheが含まれているとIE側で正しく処理ができないんだそうです。なんとご無体な・・・。

FirefoxでHttpFox使ってdata_output.phpのレスポンスヘッダを調べてみたところ、あったあったありましたよPragma:no-cacheが。ということで、php側に対応を依頼しました。

しかしこれ随分と前から存在する問題のようですけど、IE側では修正(変更?)する予定は無いんでしょうか・・・。


Filed under: ActionScript3,Troubles,WindowsComments (0)— tonpoo @ 4:22 PM

2010
7/5

WPtouchのライセンスについて

wptouch_ss

先日ついにiPhone4を購入。このブログもとりあえずiPhone対応してみようと思い立って探してみたところ、たどり着いたのがWordPressのWPtouchというプラグイン。

WPtouch 2.0 Pro – Mobile iPhone/Android Themes and Development Framework For WordPress » BraveNewCode Inc.

この記事の執筆時現在、有料版のWPtouch 2.0 Proと、無料版のWPtouch 1.9というのがあります。今回導入したのは無料版の方。どこからダウンロードするのかわかりづらかったんですが、上記サイトのページ中程にあるメニューの中から「Requirements」をクリックすると、右側に「Get WPtouch 1.9(Free version)」という箇所があり、ここからダウンロードできるようです。

ちなみにWordPressのプラグインの新規追加画面で「WPtouch」を検索すると、「WPtouch iPhone Theme」という名前で出てきます。自分はこちらで見つけて、そのままインストールしました。

導入すると、iPhoneからアクセスしたときに、上記のスクリーンショットのような画面になります。素晴らしい!試してないけど、おそらくiPadからアクセスしてもこうなるのかな。

で、気になったのがライセンス形態。案件での商用利用が可能かどうかを調べてみました。たどり着いたのは先ほどと同じメニューの中から「Overview」をクリックして出てくる文書の中の「We <3 GPL」という箇所。「<3」ってのは「kiss」ってことだと思うんですが、例によって簡単に訳してみました。

我々はGPLが大好きです

我々はオープンソースを、ソフトウェアの自由を愛していますし、みなさんがそうであることもわかっています。

WPtouch ProがWordPressのGPLライセンスに適合しているのもそのためです。これはつまり、ひとたび購入してしまえば、(※GPLライセンスに適合する限り?)自由に使うことができるということです。我々からのサポートや自動アップグレードは、みなさんが購入するライセンスに紐づいて行われます。ただ、オリジナルのソフトウェアをどのように使うかは、みなさんの自由です。

文中の※および強調部分は自分がつけました。これを見る限り、WPtouch ProのライセンスはWordPressのラインセンスに準拠する=GPLってことで、WordPressを(GPLに沿って)使ってる場合には問題なく使える、って判断してもよさそうですね。

ただ気になるのは上記の文章があくまで有料版のWPtouch Proについての記述であるという点。無料版の場合はどうなるんでしょうか・・・。

追記:

WPtouch 1.9.14のライセンスについて、そういえばソースコードに載ってるんじゃないかと思って調べたら、wptouch.phpに記載がありました。当該箇所を転載:

# The code in this plugin is free software; you can redistribute the code aspects of
# the plugin and/or modify the code under the terms of the GNU Lesser General
# Public License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# See the GNU lesser General Public License for more details.

こちらもやはりGPL(GNU Lesser General Public License バージョン2.1)、ってことのようですね。


Filed under: TranslationComments (0)— tonpoo @ 12:37 PM

2010
7/2

Error calling method on NPObject

ss

製作中のとあるフルFlashサイト。ブラウザで普通に確認してる分には問題なく動作していたため全く気がつかなかったが、Firefoxのエラーコンソールを開いてみると「Error calling method on NPObject」というJavaScriptエラーが頻発!「なんじゃこりゃ」ということで早速調べてみたところ、原因がわかりました。

まず、今回のサイトは以下のような条件が揃っていました。

  • SWFファイルのドメインと、そのSWFファイルを埋め込んで表示するHTMLファイルのドメインが異なっている(SWFは http://www.hogehoge.home/movie.swf にあり、HTMLファイルは http://user.hogehoge.home/index.html にある、というような感じ)
  • マウスホイール対応のためにSWFWheelを使用
  • SWFファイルの埋め込みにSWFObjectを使用

そしてSWFWheelのサイトを見ていたところ、以下のような注意書きが:

その他

外部ドメインからの読み込み

SWFWheelを使ったswfファイルを、外部ドメインから読み込む場合、HTML側とActionScript側の両方でExternalInterfaceの動作を明示的に許可する必要があります。

  1. HTML側にて、paramタグ及びembedタグでallowScriptAccessの値にalwaysを指定する。
  2. ActionScript側にて、Security.allowDomain等で許可するドメインを指定する。

ビンゴですね。1.の方は対応済みだったんですが、2.の方が未対応でした。ところで今回のサイト、サブドメインの数が一定でなく、運用後に随時追加される可能性があります。ので、ワイルドカードを使って以下のようなコードを追加。

Security.allowDomain("*.hogehoge.home");

結果は・・・?ダメでした。まだエラーが出ます。うーん、もしかしてワイルドカードでサブドメインを指定するのは無理なのか?ということで、今度は以下のコードで実験。

Security.allowDomain("*");

成功!エラーがでなくなりました。全ドメインを対象にしてしまうのは危険といえば危険ですが、現時点ではこれが最善の策でしょうか。


Filed under: ActionScript3,SWFObject,SWFWheel,TroublesComments (0)— tonpoo @ 11:37 AM