2012/09/22追記:
本件解消していることを確認しました。詳細は、AmazonおまかせリンクWidgetでサムネイルが表示されるようになった件を御覧ください。
Amazonアソシエイトは、Amazonの提供するアフィリエイトプログラムです。このブログでも参加しており、恐らくこの記事の右横にAmazon広告が表示されていると思います。
Amazonアソシエイトでは数多くのWidgetが用意されており、その多彩さはAmazonアソシエイトの特徴のひとつと言えるでしょう。何れも簡単なJavaScriptコードをコピーペーストするだけで、広告を表示させることが出来ます。
このWidget群の一つに「Amazonおまかせリンク」があります。「Webサイトの内容に沿った商品を自動的に表示する」ことが特徴で、このブログで使用しているのも、このWidgetです。
「Amazonおまかせリンク」Widgetは大変便利なのですが、残念ながらChromeでアクセスすると、次の画像のように、広告のサムネイルが表示されません。
Chrome以外のブラウザ、例えば、Safari、Firefox、Operaなどでアクセスした場合には、サムネイルが表示されます。
この問題は、AmazonとChromeとの両者に原因があり、その複合によって生じています。
「Amazonおまかせリンク」Widgetは1行のscriptタグから始まります。このスクリプトは他のスクリプを幾つか呼び出し、最終的にiframeを作成した後、上記で示したような広告HTMLを読み込みます。
この広告HTMLへはサムネイルがimgエレメントとして埋めこまれています。但し初期状態は、CSSで「visibility:hidden」と設定され画像は表示されません。
このiframeで読み込む広告HTMLへもスクリプトが埋め込まれており、loadイベントを契機に実行が開始されます。このスクリプトはサムネイルサイズの調整などを行ない、最後にCSSのvisibilityをvisibleへと設定します。つまり、サムネイル画像を表示させるためには、広告HTMLを適切に読み込み、その中のスクリプトを正しく発動させなければなりません。
この一連の流れに於いて、Amazonサーバからは広告HTMLファイルを取得することになるのですが、実はこのAmazonのサーバには、広告HTMLを正しく送出してこない、という問題があります。
例えばある伝送に於いては、広告HTMLファイルよりも大きなサイズを、HTTPのContent-Length:ヘッダへと付加します。その上で、広告HTMLコンテンツの送出が終了した時点でTCPセッションをcloseします。即ち、ブラウザにとっては、伝送が途中で途切れてしまったかのように見えてしまいます。何度か実験を行いましたが、正しいContent-Lengthを送ってくることは一度もありませんでした。また、実コンテンツサイズとContent-Lengthのサイズ差も一定ではありませんでした。
一方Chromeへは、Content-Length分のコンテンツが送られてこなかった場合、loadイベントを発火しない、という問題(または仕様)があります。Content-Length分読み込む前にコネクションが切断された場合、もしChromeの取得したコンテンツサイズが256バイト以上であれば、レンダリングは行うものの、loadイベントを発火しません。一方、コンテンツサイズが256バイト未満の場合には、レンダリングを行うことなく「Error 100(net::ERR_CONNECTION_CLOSED)」エラーを表示します。
この「不正なコンテンツサイズをHTTPのContent-Lengthへ付加する」Amazonサーバと、「Content-Length値分のコンテンツを読み込まない限りloadイベントを発火しない」Chromが結びつくことで、「Amazonおまかせリンク」Widgetがサムネイルを表示しない、という事象を引き起こすことになります。
問題の本質はAmazonサーバです。正しいContent-Lengthを付加してくれれば問題ありません。そもそもこのサーバは、場合によっては、広告HTMLファイルの送出を、途中でうち切ってしまうことさえあります。この場合には、ブラウザを問わず広告は適切に表示されません。
一方でChromも、既にレンダリングを行ってしまっている以上、他ブラウザのように、loadイベントを発火してくれる寛容さがあってもよいのでは、とも思います。
上記問題をAmazonへ報告したところ「担当部署に申し伝えさせていただき、今後のよりよいサービス向上に向けて参考とさせていただきます」との回答が返ってきました。
Chromeの挙動に関しては、Chromium開発チームへ
バグレポートを送りましたが、仕様の解釈的にはサーバ側の問題であり、ブラウザとしての対応をどうするかは意見を集めたい、という状態になっています。
最近ではChromeのブラウザシェアも伸びていると聞いています。アフェリエイト収入へ頼っている方は、「Amazonおまかせリンク」Widgetの利用には十分留意したほうが良いかもしれません。