1

この単純な問題を解決するために 3 日間を費やしました。私が望むのは、ウェブサイト全体がwinversionグローバル変数の値を記憶し、それを function 内から変更できるようにすることだけです。(はい、グローバル変数は darthwader よりも悪いことを知っていますが、それが私の人生で起こっている唯一の良いことです)

を含む 1 つの html ファイルがあり<iframe>、ユーザーが内部をクリックすると、(ドメインから) さまざまなページがその にロードされます<iframe>

これは私のindex.htmlです(周りにいくつかのdivがあり<iframe>ますが、他のすべてが機能し、javascriptはこれにのみ使用されるため、無関係であると確信しています<iframe>

 <script type="text/javascript" src='script.js'></script>
---------- ( some inner body html , not important)----------------

 <iframe id="myiframe" src="mainproblems.html" >

デフォルトの iFrame ページには、この html コードがあります

    <a href="#" onclick="setwinver('xp')";>I have  Windows XP </a>
    <a href="#" onclick="setwinver('win7')";> have Windows 7/Vista </a>

私のscript.jsはこれです

 // This is supposed to be my global variable to hold windows version value
 var winversion ; 

    // This function (I officially hate it now) is supposed to change 
    // winversion variable based on what user clicked on the iFrame
    function setwinver(ver) 

{   
        //so now winversion should either have xp or win7 assigned
        winversion=ver; 
}

しかし、後で同じ JavaScript ファイル<iframe>を読み込もうとするwinversionと、未定義と表示されます。このnavigatenow()関数は、ユーザーが 1 ページ目で Windows バージョンを選択し、次の html ページでリンクをクリックして msconfig 説明ページ ( にロードされる<iframe>) を起動するとトリガーされます。

    function navigatenow()
{

        if (winversion == "xp")
    {
         window.location.href=("msconfigxp.html");
    }
    else
    {
        window.location.href=("msconfig7.html");
    }
}

私が試してみました:

  • 使う/使わないvar

  • /notusing 一重引用符、二重引用符を使用します (ただし、私が知っている違いはありません)。

  • 巻き上げに関するダースの記事を読んでいます。

  • persistjs を数時間使用します。

  • 瞑想と祈り!

何も機能しません。のろわwinversionれた変数は、私の存在の目的と同じくらいまだ定義されていません。

私が望むのは、ユーザーが選択したWindowsバージョンをhtmlファイルに記憶させることだけです(プログラムでWindowsバージョンを検出することはできません。ユーザーにバージョンを尋ねる目的は異なります)。

これを修正する助けがあれば大歓迎です。そうでない場合は、飛び降りることができる適切な崖を提案してください。

4

2 に答える 2

4

iframe 内のページは別のウィンドウであり、インデックス ページのスコープを継承しません。親ウィンドウに移動し、そこでスクリプトを使用することを指定する必要があります。

window.parent.setwinver('xp');

そして変数への同じアクセス:

if (window.parent.winversion == "xp")

これが実際の例です:http://jsfiddle.net/ga62A/

インデックス ページは、この iframe をロードします: http://jsfiddle.net/cMDvc/1/
次に、この igrame に進みます: http://jsfiddle.net/9qjaX/

于 2012-09-15T10:38:57.313 に答える
1

LePrince さん、ページを変更すると、JS は変更内容のすべてのメモリを削除します。JavaScript がページに読み込まれますが、エンド ユーザーのブラウザーから JS ファイルに書き戻すことはできません。

読み取った元のコードに加えたすべての変更は、メモリに保存されます。その記憶は、ページが存続している限り持続します。その後、いつもと同じように、ページを再度リロードします。

これ以上のことを行う必要がある場合、最初に開始できるのは ですdocument.cookie。これは非常に小さな情報を格納するためのものであり、Cookie を取得して Cookie を設定するツールを作成しない限り、使用するのは楽しいものではありません。

次は、より便利で新しい localStorage です (ただし、古い IE ではサポートされていないため、Windows 7 を使用している XP ユーザーは使用できません)。ただし、これはまだ 1 人のユーザーのデータにのみ有効であり、他のユーザーのデータを変更することはありません。

他の人が投稿や評価、アップロードされた画像を見ることができる場所にコメントや星評価などを追加する機能が必要な場合は、サーバー側のプログラミングを検討する必要があります。Ruby(/Rails)、PHP、Node.jsなど。

于 2012-09-15T11:13:30.437 に答える