mixi アプリの URL
mixi アプリは、以下のような URL からアクセスされます。
http://mixi.jp/run_appli.pl?id=<アプリのID>
mixi アプリからのデフォルトの画面サイズ指定
上記の mixi アプリの URL から表示されるページでは以下のような iframe タグが指定されていて、その内部にアプリその他が表示されるようになっているようです。
<iframe src="mixiが用意したURL" id="アプリのID" name="アプリのID" height="500" width="945" frameborder="0" border="0"></iframe>
この段階で iframe のサイズが height="500" width="945" と指定されています。
アプリ用 iframe 内部
上記 iframe の先は mixi 側が用意した opensocial 系の API javascript 等を含むページとなっており、最後のほうで、gadget.xml で記述した自サイト用の記述が入るようになっています。
強引にサイズを変更してみる
強引に以下のように親の iframe を変更しようとすると、parent.document の段階でセキュリティに引っかかってしまいます。
<script type="text/javascript"> alert("in script"); function resizeAppContentIframe() { alert("in resizeAppContentIframe()"); alert("parent = " + parent); alert("parent.document = " + parent.document); alert("parent.document.getElementById('app_content_xxxxx') = " + parent.document.getElementById('app_content_xxxxx')); var iframeElement = parent.document.getElementById('app_content_xxxxx') alert("iframeElement = " + iframeElement); iframeElement.style.width = "945px" iframeElement.style.height = "800px" } function init() { alert("in init()"); setTimeout("resizeAppContentIframe()", 10); } gadgets.util.registerOnLoadHandler(init); </script>
Gadgets API を使いましょう
結局、以下のように Gadgets API を使えば OK でした。
<?xml version="1.0" encoding="UTF-8"?> <Module> <ModulePrefs title="sample"> <Require feature="opensocial-0.8" /> <Require feature="dynamic-height" /> </ModulePrefs> <Content type="html"><![CDATA[ <!-- resize parent iframe --> <script type="text/javascript"> gadgets.util.registerOnLoadHandler(function(){ gadgets.window.adjustHeight(); }); </script> ]]></Content> </Module>
以下の2点がポイントです。
<Require feature="dynamic-height" />
gadgets.window.adjustHeight();
0 件のコメント:
コメントを投稿