更改src后,在框架上重新加载键盘监听器

时间:2016-06-19 13:21:22

标签: javascript html dom frames

我正在尝试创建一个小书签,允许用户使用'j'和'k'浏览一些webcomics或一系列文章。我将代码基于现有的bookmarklet转到“下一页”或“上一页”。

(function() {
    var newWindow = window.open('about:blank', '_blank');
    newWindow.document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"><html><head><title>' +
        document.title + '</title></head><frameset><frame src="' + location.href + '"></frameset></html>');
    newWindow.document.close();
    newWindow.document.getElementsByTagName('frame')[0].contentDocument.onkeypress = function(e) {
        e = e || window.event;
        var charCode = (typeof e.which == 'number') ? e.which : e.keyCode;
        if (charCode) {
            alert(charCode);
            var frame = newWindow.document.getElementsByTagName('frame')[0];
            var document = frame.contentDocument
            if (String.fromCharCode(charCode) == 'j') {
                z = document.getElementsByTagName('link');
                for (i = 0; a = z[i++];) {
                    if (a.rel == 'previous') {
                        frame.src = a.href;
                        return;
                    }
                }
                m = frame.src.match(/^(.+\D)(\d+)(\D*)/);
                if (m) {
                    s = '' + (1 * m[2] - 1);
                    while (s.length < m[2].length) s = '0' + s;
                    frame.src = m[1] + s + m[3];
                }
            } else if (String.fromCharCode(charCode) == 'k') {
                z = document.getElementsByTagName('link');
                for (i = 0; a = z[i++];) {
                    if (a.rel == 'next') {
                        frame.src = a.href;
                        return;
                    }
                }
                m = frame.src.match(/^(.+\D)(\d+)(\D*)/);
                if (m) {
                    s = '' + (1 * m[2] + 1);
                    while (s.length < m[2].length) s = '0' + s;
                    frame.src = m[1] + s + m[3];
                }
            }
        }
    }

})()

目前,我正在尝试打开一个新窗口并使用一个框架。 onkeypress函数是分配,但我认为这只是因为页面在尝试时没有加载,因为当我稍等一下并尝试从第一页的JS控制台分配它时,有用。我认为等待负载完成就足够了(我会尝试添加它,我只是JS的初学者)。

问题是当帧的src改变时,onkeypress函数会丢失。我该如何解决这个问题?

我想我应该在窗口上使用一些监听器,但是如何?

1 个答案:

答案 0 :(得分:0)

解决了!

out2