web-dev-qa-db-ja.com

onclick = "history.clear();"を実行することは可能ですか?

PhoneGapアプリケーションにlogoutボタンを実装して、ユーザーを認証ページに戻します(フィールドがクリアされています)。 onclickイベントでアンカーを使用しているボタン:

<script type="text/javascript">
function doLogout() {
    var backlen = history.length;
    history.go(-backlen);
    window.location.replace("index.html");
}
</script>

<a data-role="none" href="#" onclick="doLogout"></a>

しかし、それは機能しません。つまり、すでにフィールドが入力されている認証ページに戻るだけで、一歩戻ったように見えます。私はhistory.clear()について確信がありません。

<a data-role="none" href="index.html" onclick="javascript:history.clear();"></a>

私の問題はどこにあるのですか? PhoneGapでログアウトイベントを処理する別のソリューションがある場合は、それに従います。ありがとう

11
Dozent

history.goの呼び出しは無視されます。履歴にある項目よりも1つ前のステップに戻るためです。 lengthプロパティには、現在のアイテムを含むアイテムの数があるため、たとえば、履歴に4つのアイテムがある場合、戻ることができるのは3ステップだけです。

最初のステップに戻るには、長さから1を引きます。

history.go(-(history.length - 1));

ただし、そのページ専用の新しいウィンドウを開いた場合にのみ、スタートページに戻ります。それ以外の場合は、ユーザーがそのウィンドウを使用してアクセスした最初のページに戻ります。


clearオブジェクトにはhistoryメソッドはありません。

参照: https://developer.mozilla.org/en-US/docs/DOM/window.history

ブラウザの履歴はユーザーのものであり、ユーザーは何も削除できません。

14
Guffa

私はPhoneGapを開発したことがありませんが、Webアプリケーションでは以下のコードを使用できます。

window.location.replace(url);を試してください

リダイレクト後、前のページに移動する方法はありません。

6
KnowGe

onclick属性を使用する場合、引用符で囲まれているのは、関数の名前だけではなく、実際のステートメントです。そう:

<a data-role="none" href="#" onclick="doLogout();"></a>
<!-- Note the (); ----------------------------^^^   -->

また、リンクをたどるデフォルトのアクションを防ぐために何もしていないので、ブラウザはhrefをたどります。これは#で、現在のページの先頭に移動します。 return false;を追加することで、(必要に応じて)これを防ぐことができます。

<a data-role="none" href="#" onclick="doLogout(); return false;"></a>

質問の2番目の部分を追跡することはできませんでしたが、2番目の例ではonclick属性のjavascript:が必要ない、または必要ないことに注意します。 URIが期待される場所(たとえば、アンカーのhref)でのみ、この擬似プロトコルを使用します。 onXYZ属性の内容は常にコードであり、URIではありません。

最後に、スタイリングで何かをしているのでない限り、これらのリンクはどちらも空であるため、クリックするのがかなり難しくなります。 :-)

1
T.J. Crowder

使用:navigator.app.clearHistory();

0
adsdsadsdasdasd