0
私は小さなブックマークレットを作って、ユーザーが 'j'と 'k'を使ってウェブコミックや一連の記事をナビゲートできるようにしています。私は既存のブックマークレットに自分のコードを基づいて、 '次の'ページや '前のページ'に行きました。srcの変更後にフレームにキーボードリスナーをリロードする
(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関数が失われるという問題があります。どうすれば修正できますか?
私はウィンドウ上でリスナーを使うべきだと思いますが、どうですか?