我有以下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!')" )
然后在开始时显示警告消息。
感谢任何帮助,谢谢!
答案 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
之后的数据。