2

このようなjsコ​​ードをangus.jsで共有しました

var g_colour;

function getcolour() {
  return g_colour;
}

function setcolour(colour) {
  g_colour = colour;
}

次のような html ページ 1 と 2 によってアクセスされます。

1.html:

<html>
<head>
<title>Global javascript example</title>
</head>
<body>
<a href="2.html">Page2</a>
<script src="angus.js"></script>
<form name="frm">
<input type="button" value="Setblue" onclick="setcolour('blue');" />
<input type="button" value="Setyellow" onclick="setcolour('yellow');" />
<input type="button" value="getcolour" onclick="alert(getcolour());" />
</form>
</body>
</html>

2.html:

<html>
<head>
<title>Global javascript example page 2</title>
</head>
<body>
<a href="1.html">Page1</a>
<script src="angus.js"></script>
<form name="frm">
<input type="button" value="Setblue" onclick="setcolour('blue');" />
<input type="button" value="Setyellow" onclick="setcolour('yellow');" />
<input type="button" value="getcolour" onclick="alert(getcolour());" />
</form>
</body>
</html>

あるページで色を設定してページ 2 に移動し、その色にアクセスすると、undefined が返されます。つまり、g_colour の新しいインスタンスが、新しい html ページのロード時に作成されるようです。

ページ 1 で設定し、ページ 2 でアクセスできる一種のトップレベル変数にアクセスできるようにしたいのですが、Javascript でそれを行うにはどうすればよいですか?

4

4 に答える 4

11

JS 変数は永続的ではありませんでしたが、これを回避する方法が 2 つあります。

  1. クッキー
  2. 保管所

Cookie は、最も古いブラウザを除くすべてのブラウザでサポートされていますが、非常に扱いにくく、使いにくい場合があります。その上、ブラウザはページが読み込まれるたびに Cookie をサーバーに送信するため、JavaScript だけで使用すると非常に非効率的です。

代わりに、おそらく [ストレージ] オプションを確認する必要があります。

アイテムの保存は と同じくらい簡単localStorage.itemname = value;です 読み取りは と同じくらい簡単localStorage.itemnameで、削除は と同じくらい簡単ですdelete localStorage.itemname

これらの値はページロード間で保存されますが、サーバーには送信されません。

于 2013-01-03T12:56:06.200 に答える
4

localStorage を使用します。

localStorage.setItem('name', 'value');
var something = localStorage.getItem('name');

setItem最初のページで、次にgetItem2 番目のページで。

localStorage は、「通常の」JavaScript 変数とは対照的に、ページロード間で持続します。

「通常の」変数は、JS ファイルが読み込まれる (そして実行される) とすぐに初期化されますが、ファイルがアンロードされると破棄されるため、ユーザーがページを離れると破棄されます。

Cookie を使用することもできますが、次のような文字列に格納されるため、JS で操作するのは少し面倒です。

'name=value; name1=value1; name2=value2';
于 2013-01-03T12:55:43.923 に答える
2

各ページ リクエストはスクリプトをリクエストし、そのコピーを実行します。リクエストがキャッシュのためにクライアントで停止した場合でも、現在のページはスクリプトを最初から実行します。はい、同じコードで動作していますが、インスタンスが異なります (つまり、2 つの異なるコンテキストでその変数の 2 つのコピーがあります)。

于 2013-01-03T12:56:39.750 に答える
0

問題は、ページ 1 が JavaScript ファイルをロードしていて、ページ 2 がそれを再度ロードしていることです。そのため、ページ 2 が JS ファイルを再度初期化するため、ページ 2 がロードされると、その JS ファイルの変数に設定したものはすべて失われます。必要に応じて、Cookie を使用して値を保存するか、ページ 1 とページ 2 を組み合わせて別の div に配置し、ロジックに従って div を表示/非表示にするのが簡単な場合。

于 2013-01-03T13:01:54.723 に答える