2016-06-19 9 views
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関数が失われるという問題があります。どうすれば修正できますか?

私はウィンドウ上でリスナーを使うべきだと思いますが、どうですか?

答えて

0

解決済み!

(function() { 
    window.document.write('<html><frameset><frame src=""></frameset></html>'); 
    window.document.close(); 
    var frame = window.document.getElementsByTagName('frame')[0]; 
    window.document.onkeypress = function(e) { 
     e = e || window.event; 
     var charCode = (typeof e.which == 'number') ? e.which : e.keyCode; 
     if (charCode) { 
      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]; 
       } 
      } 
     } 
    }; 
    frame.addEventListener("load", function() { 
     frame.contentDocument.onkeypress = window.document.onkeypress; 
     window.history.pushState({}, "", frame.src); 
     document.title = frame.contentDocument.title 
    }) 
    frame.src = location.href; 
})(); 
関連する問題