【问题标题】:KDE plasmoid ind autorefreshKDE plasmoid ind 自动刷新
【发布时间】:2012-05-30 10:37:24
【问题描述】:

我正在尝试用 JavaScript 编写 KDE4 plasmoid,但没有成功。 因此,我需要通过 HTTP 获取一些数据并将其显示在 Label 中。效果很好,但我需要定期刷新(每 10 秒一次),它不起作用。

我的代码:

inLabel = new Label();
var timer= new QTimer();
var job=0;
var fileContent="";

function onData(job, data){
   if(data.length > 0){
      var content = new String(data.valueOf());
      fileContent += content;
   }
}

function onFinished(job) {
  inLabel.text=fileContent;
}

plasmoid.sizeChanged=function()
{
    plasmoid.update();
}

timer.timeout.connect(getData);
timer.singleShot=false;
getData();
timer.start(10000);

function getData()
{
    fileContent="";
    job = plasmoid.getUrl("http://192.168.0.10/script.cgi");
    job.data.connect(onData);
    job.finished.connect(onFinished);
    plasmoid.update();
}

获取脚本一次,10 秒后不刷新。我的错在哪里?

【问题讨论】:

    标签: javascript kde-plasma plasmoid


    【解决方案1】:

    至少在这里工作得很好(从 gi​​t master 运行最近的构建),getData() 正在按预期调用。您能在控制台中看到任何错误吗?

    编辑:问题在于 getUrl() 为 KIO::get() 显式设置 NoReload,这导致它从缓存加载数据,而不是强制从服务器重新加载。解决方案是在 URL 中添加一个查询参数,以使其强制重新加载。

    【讨论】:

    • 控制台中没有任何错误。我已经运行了嗅探器并查看了流量,但没有看到定期请求,只有一个在 plasmoid 开始时。
    • 您运行的是哪个 KDE 版本?使用 plasmoidviewer 启动还是仅将其添加到 Plasma?我刚刚也在 KDE 4.6.5 上测试了脚本(使用 plasmoidviewer),它似乎也在那里工作。您还可以尝试将 print() 或 debug() 调用添加到您的回调中,以查看它们是否被调用。
    • 来自 Kubuntu 的 KDE 4.8.3。我已将 print("getData") 添加到 getData() 函数,现在进入控制台: $ plasmoidviewer plasma_test getData getData getData getData getData getData getData 但在嗅探器中我看不到请求。
    • 啊,我现在明白了。问题是它在后台使用 KIO::get() 和 NoReload,这基本上导致它使用缓存而不是重新加载页面。尝试将查询参数附加到 url 以查看是否有帮助。 Here's a link to the source.
    • 忘了补充一点,您可能还想看看QML plasmoids,因为它们是自 4.7 以来创建脚本化小程序的首选方法。虽然对解决这个问题没有帮助,但无论如何都值得注意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多