从html文件中调用ruby方法

时间:2013-10-30 07:28:00

标签: html ruby

我尝试构建一个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()?

1 个答案:

答案 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