【问题标题】:SketchUp WebDialog does not execute JS and action_callbackSketchUp WebDialog 不执行 JS 和 action_callback
【发布时间】:2016-10-24 18:46:14
【问题描述】:

我有以下 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!'" )
}

由于某种原因,应该更改 &lt;p&gt; 元素值的脚本和回调操作都不起作用。奇怪的是,如果我把 JS 改成

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

然后在启动时显示警报消息。

感谢任何帮助,谢谢!

【问题讨论】:

    标签: javascript ruby sketchup


    【解决方案1】:

    对于.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 元素是&lt;p&gt;: &lt;p id='data'&gt;Text will go here...&lt;/p&gt;get_element_value 仅适用于表单元素。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-26
      • 2018-09-15
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多