SketchUp WebDialog不执行JS和action_callback

时间:2016-10-24 18:46:15

标签: javascript ruby sketchup

我有以下index.html:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Hello World</title>
  <script>
    function close() {
      window.location.href = 'skp:closeDialog@someString';
    }
  </script>
</head>
<body>
  <p id='data'>Text will go here...</p>
  <button onclick="close()">Done</button>
</body>
</html>

我有以下ruby脚本:

dlg = UI::WebDialog.new( "Hello World", "", false, 500, 300, 433, 234, false )

dlg.set_file( File.dirname(__FILE__) + 'index.html' )
dlg.add_action_callback( "closeDialog" ) {|dialog, params|
    data = dlg.get_element_value( "data" )
    puts data
    dlg.close
}
dlg.show {
    dlg.execute_script( "document.getElementById('data').innerHTML = 'Hello World!'" )
}

由于某些原因,应该更改<p>元素值的脚本和回调操作都不起作用。奇怪的是,如果我将JS更改为

dlg.execute_script( "alert('Hello World!')" )

然后在开始时显示警告消息。

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

对于.show中的块 - HTML可能还没有准备好。看看这篇文章:https://github.com/thomthom/sketchup-webdialogs-the-lost-manual/wiki/window.onload

鉴于此脚本:

module TT_Test
  @d = nil
  @d = UI::WebDialog.new('On Load Test')
  @d.add_action_callback('onload') { |dialog, params|
    puts '>> window.onload'
  }
  @d.set_html('Onload Test')
  def self.onload
    @d.show {
      puts '>> ruby block'
    }
  end
end

视窗:

load 'test/webdialog.rb'
true
TT_Test.onload
true
>> ruby block
>> window.onload

OSX:

> load 'test/webdialog.rb'
true
>> window.onload
> TT_Test.onload
true

根据show事件,观察onLoad中的阻止不可靠。

我一直在做的是使用jQuery的ready事件并向Ruby发送回调 - 这样我知道对话框的内容已经准备就绪。只有在回调中我才会执行设置等。

至于dlg.get_element_value( "data" ) - 代码中的data元素是<p><p id='data'>Text will go here...</p>get_element_value仅适用于表单元素。

请注意,在您的add_action_callback中,您拥有params参数 - 该参数将包含@skp:closeDialog@someString之后的数据。