我想定期更改页面标题,即在当前页面标题前面添加一个(*)并在几秒钟后将其删除。我想在代码中打开和关闭此标题更改。
我从以下位置获取并设置页面标题:
public static native void setPageTitle(String title) /*-{
$doc.title = title;
}-*/;
public static native String getPageTitle() /*-{
return $doc.title;
}-*/;
但是我应该如何编写一个在添加和删除前缀时每300毫秒更改一次页面标题的函数?
我尝试的是:
private void changePageTitle(final String prefix) {
new Timer() {
@Override
public void run() {
String pageTitle =getPageTitle();
if (pageTitle.startsWith(prefix)) {
pageTitle = pageTitle.substring(prefix.length());
}
else {
pageTitle = pageTitle + prefix;
}
setPageTitle(pageTitle);
}
}
}.schedule(300);
}
这不起作用。我不知道如何打开和关闭这个过程?
效果应该像Facebook一样。当新邮件到达且您不在Facebook浏览器选项卡上时,该选项卡会显示闪烁的通知。
答案 0 :(得分:1)
您必须按schedule(300)
更改scheduleRepeating(300)
。
您应该只使用一个Timer实例或保存最后一个计时器以在创建新计时器之前将其取消。
BTW:您不需要编写任何JSNI来访问窗口标题,只需使用Window.getTitle()
和Window.setTitle(String)
编辑:
这应该有效:
// create just an instance of the timer
final MyUpdateTitleTimer mytimer = new MyUpdateTitleTimer();
// To Start the updater
mytimer.setPrefix("> ");
// To Stop set the prefix to null
mytimer.setPrefix(null);
class MyUpdateTitleTimer extends Timer {
private String prefix;
private String title;
private boolean b;
public void run() {
String s = (b = !b) ? prefix + title : title;
Window.setTitle(s);
}
public void setPrefix(String prefix) {
if (title != null) {
Window.setTitle(title);
}
this.prefix = prefix;
if (prefix == null) {
cancel();
} else {
title = Window.getTitle();
scheduleRepeating(300);
}
}
}