1

コントロール ペインと IFRAME を持つ単純な .hta アプリケーションに取り組んでいます。

戻るボタンと進むボタンを追加しましたが、機能していないようです。次の例のリンク「a」と「b」をクリックすると、戻るボタンと進むボタンは何もしません。

これはどのように達成できますか?

test.hta
===================================
<!DOCTYPE html>
<html>
<head>
    <title>Back / Forward Buttons</title>
    <hta:application id="test" applicationname="test" icon="res/icon.ico" showintaskbar="yes" singleinstance="yes">
</head>
<body>
    <div class="strip">
        <button onclick="output.history.back(); return false">Back</button>
        <button onclick="output.history.forward(); return false">Forward</button>
    </div>

    <div id="iframe-wrap" class="iframe-container">
        <iframe id="output" name="output" src="a.html" width="100%" border="0" frameborder="no" scrolling="yes"></iframe>
    </div>
</body>
</html>

a.html
===================================
<!DOCTYPE html>
<html>
    <head><title>A</title></head>
    <body>PAGE A - <a href="b.html">Go to B</a></body>
</html>

b.html
===================================
<!DOCTYPE html>
<html>
    <head><title>B</title></head>
    <body>PAGE B - <a href="a.html">Go to A</a></body>
</html>
4

2 に答える 2

0

次のコマンドを使用して、iFrameでページの変更を手動で追跡する必要がありました。

    var iFrameHistory = {
        history : [],
        pos     : 0,
        ignore  : false,

        updateUI: function() {
            var el;

            // Enable / disable back button?
            el = document.getElementById('back');
            if (iFrameHistory.pos === 1)
                el.className = 'disabled';
            else
                el.className = '';

            // Enable / disable forward button?
            el = document.getElementById('forward');
            if (iFrameHistory.pos >= iFrameHistory.history.length)
                el.className = 'disabled';
            else
                el.className = '';
        },

        back: function() {
            var newPos = Math.max(1, this.pos - 1);
            if (newPos !== this.pos) {
                this.pos = newPos;
                this.ignore = true;
                document.getElementById('output').src = this.history[ this.pos - 1 ];

                this.updateUI();
            }
        },
        forward: function() {
            var newPos = Math.min(this.history.length, this.pos + 1);
            if (newPos !== this.pos) {
                this.pos = newPos;
                this.ignore = true;
                document.getElementById('output').src = this.history[ this.pos - 1 ];

                this.updateUI();
            }
        },
        reload: function() {
            document.getElementById('output').contentWindow.location.reload();
        },
        onload: function() {
            if (!this.ignore) {
                var href = document.getElementById('output').contentWindow.location.href;
                if (href !== this.history[ this.pos - 1 ]) {
                    this.history.splice(this.pos, this.history.length - this.pos);
                    this.history.push(href);
                    this.pos = this.history.length;

                    this.updateUI();
                }
            }
            else {
                this.ignore = false;
            }
        }
    };
于 2011-10-09T14:47:52.173 に答える
0

試す:

window.frames.output.history.forward();

また

window.frames.output.history.go(+1);

おそらく、 getElementByID を使用して、履歴を使用しようとしている要素を取得することをお勧めします。

また、iFrame の履歴に関する既知のクロス ブラウザの問題がいくつかありますが、現時点では正確に覚えていませんが、Google が答えてくれるはずです。

于 2011-10-07T01:10:08.437 に答える