電気羊の執務室

魔法を作る仕事をしています。

SketchupのWebDialogで、rubyスクリプトが呼べない時

前回の続きです。
SketchUpには、WebDialogというコンポーネントがあります。
これを使うとrubyスクリプトから、フォームを作成でき,
ユーザーと対話的にスクリプトを実行できるわけです。

すごくハマったところ

今回、WebDialog経由でrubyスクリプトを実行する際に、
すごくハマったポイントをお教えします。

動作環境:
mac OS X 10.8.2
SketchUp 8.0.4810

それは・・・入力部品の種類です。
ボタンなどを押した際にjavascriptのコードが実行されるよう、
動作を設定しているのですが、
なんと、入力部品の違いによって、動作の一部が実行されません。

buttonとinput type="button"

結論から言うと、リンクと、\で生成したボタンは、
問題なく動作します。

しかし、\<button>エレメントで生成したボタンは、
window.location=でリダイレクトを行う事ができません。

これができないと、javascriptからrubyコードが呼べないのです。
rubyスクリプトは、javascriptからはurlとして指定する必要があるからです。

サンプルコード

400: Invalid request

サンプルコードの使い方

まずはSketchUp上で、コードを実行します。

実行すると、こんな画面が表示されます。
ボタンが2つ、リンクが1つある画面

1番上のボタンを押すと、ダイアログボックスが1回表示されます。

javascriptのメッセージ

2番めのボタンを押すと、ダイアログボックスが2回表示されます。

javascriptのメッセージ
rubyのメッセージ

リンクをクリックしても、同様に2回表示されます。

3つとも同じ関数を実行しているのに、buttonエレメントだけは、挙動が違います。
window.locationを指定することができず、rubyのメソッドを呼べません。

ボタンの動作がうまくいかない方は、
参考にしてください。

次回は、ruby側からjavascriptの関数を呼び出す処理について書こうと思います。

VimSketchUpのすすめ

余談ですが、これを読んでいらっしゃる貴方は、どうやってサンプルコードを実行していますか?
Vim上でショートカットを入力するだけで、サンプルコードが実行できたら楽ですよね。
ちょっと心が動いた方には、VimSketchUpをおすすめします。

参考資料

Trimble SketchUp
http://www.sketchup.com/intl/en/developer/docs/ourdoc/webdialog#add_action_callback

Engineering The World
http://engineeringtheworld.wordpress.com/2010/02/16/creating-web-dialogs-in-sketchup-and-making-calls-from-and-to-sketchup/

Comments