0

ページのタイトルを定期的に変更したい。つまり、現在のページ タイトルの前に (*) を追加し、数秒後に削除したい。このタイトルの変更をコードでオンまたはオフにしたいと考えています。

次からページタイトルを取得して設定します。

    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 ブラウザ タブを開いていない場合、タブには点滅する通知が表示されます。

4

1 に答える 1

1

までに変更する必要がありschedule(300)ますscheduleRepeating(300)

新しいタイマーを作成する前に、Timer のインスタンスを 1 つだけ使用するか、最後のタイマーを保存してキャンセルする必要があります。

ところで: ウィンドウ タイトルにアクセスするために 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);
    }
  }
}
于 2013-07-17T16:29:31.177 に答える