我尝试构建一个html页面,其中可以通过rubyscript文件修改innertext。 rubyscript永久运行,html页面有一个autorefresh(每隔几分钟),以便其内容发生变化。在html页面上也是一个按钮,在rubyscript文件中调用某个方法。
现在我的ruby脚本加载html页面,进行一些更改并保存文件。刷新后,html页面上的内容发生了变化。
require 'nokogiri'
require 'rubygems'
def currentTime
doc = Nokogiri::HTML(File.open("Path/to/index.html"))
doc.xpath("//*[@id='time']").inner_html = "#{Time.now}"
sleep 10
File.open("Path/To/index.html", 'w+') {|f| f.write(doc) }
end
def main
while true
currentTime()
end
end
main()
我不认为这是正确的方法,如何通过点击页面上的按钮直接调用currentTime()?
答案 0 :(得分:0)
使用本地文件和代码的浏览器的行为与更完整的Web服务有一些差异。其中一个区别是你没有简单的方法来触发服务器端代码,因为没有服务器。下一步应该是在Web服务器环境中重新实现HTML生成,而不是写入文件。
我推荐Sinatra作为您的第一个Web服务,虽然Ruby on Rails也是一个受欢迎的选择,但这里显示的代码太多了。这是您的代码按原样传输到Sinatra应用程序:
<强> app.rb 强>
require 'sinatra'
require 'nokogiri'
get '/main' do
doc = Nokogiri::HTML(File.open("Path/to/index.html"))
doc.xpath("//*[@id='time']")[0].inner_html = "#{Time.now}"
doc.to_s
end
如果你这样做,例如ruby app.rb
,然后Sinatra将自动启动本地开发Web服务器,您可以将Web浏览器指向类似http://127.0.0.1:4567/main
的地址(Sinatra告诉您它启动时使用的端口)网络服务器)。现在,您只需在浏览器中刷新页面即可获得最新时间。
这只是一个开始。有许多技术需要进一步学习并在两者之间做出决定。例如,使用Nokogiri解析HTML和交换值的效率非常低,您可能需要一个模板引擎,例如erb
。