2011-12-17 67 views
2

我正在進行跨瀏覽器粘貼捕獲。我有這個工作&在Chrome和Firefox(在Mac上)測試。它應該工作在PC上的Chrome和Firefox,但我還沒有機會測試它。希望我不會重新發明輪子,我已經爲jQuery插件或任何實現文檔範圍粘貼的JavaScript真正尋找了一點點。跨瀏覽器粘貼捕獲 - Mac Opera問題

這是不是尚未在Opera(版本11.52)(在Mac上,尚未在PC上測試過)中工作。我的問題是,當按下cmd鍵時,當我按下v鍵時,我沒有收到​​事件。我不知道如何解決這個問題,因爲我不是很酷的Opera。

工作中的jsfiddle是here

下面的JavaScript不能正常工作,請參閱工作腳本的jsfiddle。要使腳本在下面工作,您需要this os檢測插件。

問題回答 - 我該如何在Opera中完成這項工作?

留下評論,如果你喜歡 - 這是否適合你? (後瀏覽器,操作系統版本的評論)

更新 - 基於評論Baez離開這是一個Opera僅在mac問題。

update2 - 我已經更新了jsfiddle,它簡化了代碼,但仍然無法使它在mac中運行。


的JavaScript(jQuery的)

$(document).ready(function() { 
    // Fake paste 
    var doFakePaste = false; 
    $(document).on('keyup', function(e) { 
     $('#status').html(''); 
     if (($.client.os === "Mac" && e.which == 86 && e.metaKey) || 
      ($.client.os !== "Mac" && e.which == 86 && e.ctrlKey)) { 
      doFakePaste = false; 
      $('#paste').blur().remove(); 
     } 
    }).on('keydown', function(e) { 
     $('#status').html('which: ' + e.which); 
     if (($.client.os === "Mac" && e.which == 86 && e.metaKey) || 
      ($.client.os !== "Mac" && e.which == 86 && e.ctrlKey)) { 
      doFakePaste = true; 
      // got a paste 
      $('<div></div>').attr('contenteditable', '').attr('id', 'paste').appendTo('body').on('paste', function(e) { 
       setTimeout(function() { 
        doFakePaste = false; 
        var html = $('#paste').html(); 
        var text = $('#paste').text(); 
        $('#resultA').text(html); 
        $('#resultB').text(text); 
        $('#paste').blur().remove(); 
       }, 1); 
      }).focus(); 
     } 
    }); 

    $('#data').html('os: ' + $.client.os + ' browser: ' + $.client.browser); 
}); 

HTML - 再次看到jsfiddle工作副本

<p>Click in this window and do a paste (ctrl-v or cmd-v). The pasted text will show up in the boxes below. I hope... the left box will be the HTML and the right box will be the TEXT.</p> 

<div id="status"></div> 
<div id="data"></div> 

<div id="resultA"></div> 
<div id="resultB"></div> 
+0

爲我工作在Windows 7 - 歌劇11.60 – 2011-12-17 06:29:51

回答

0

不完整的答案,但我的經驗的一部分:

  1. 您可以刪除$.client.osdocument使用e.which == 86 && (e.metaKey || e.ctrlKey)

  2. 你綁定事件。綁定事件div[contenteditable="true"] - 可能有幫助

  3. 您的代碼:attr('contenteditable', '')contenteditable可以truefalseinherit(=從母體獲得價值)

+0

我們不能用眼前這個,而不是瀏覽器檢測。 if(e.type =='keydown'&& e.which == 86 &&(e.metaKey || e.ctrlKey)) – hkasera 2012-09-21 09:26:22