2016-12-12 37 views
5

Tek sayfalık bir uygulama geliştiriyorum, sayfada bir düğmem var Bir kullanıcı düğmeyi tıkladığında sunucuma bir ajax araması yapmak ve sonra iade edilen değeri (geri arama yoluyla) kullanıcının panosuna kopyalamak istiyorum.Firefox - document.execCommand ('cut'/'copy') kısa bir kullanıcı tarafından oluşturulan olay işleyicisi içinden çağrılmadığı için reddedildi

izolasyon Her bileşen eserler, ama onlara tutkal zaman birlikte Firefox aşağıdaki hata verir:

document.execCommand(‘cut’/‘copy’) was denied because it was not called from inside a short running user-generated event handler

Ben bu hatayla ilgili ayrıntıları öğrenmek istiyorum, ama kesinlikle hiçbir bilgi çevrimiçi yoktur; Bu hatayı tetikleyen sınırlayıcı koşullar nelerdir, bu bir yığın derinliği, zaman aşımı, vb?

+3

referans * Kullanıcı tarafından oluşturulan bir etkinliğe yanıt (bir düğme tıklaması gibi). Ancak bir Ajax çağrısı eşzamansızdır ve bu nedenle yanıt alındığında orijinal tıklama olayı biter. Ekrandaki sonucu "Başka bir tuşla" Panoya kopyala "(veya benzeri) ile birlikte görüntüleyebilirsiniz. (Bu, kullanıcı için de daha iyi, çünkü bunu gerçekleştirmeden panonun üzerine yazmıyor.) – nnnnnn

cevap

1

user event işleme tamamlandıktan sonra yürütmek için zaman uyumsuz isteği ile execCommand('cut'/'copy') çağrıyı sarın. $.Deferred ile

Örnek:

firefox
function asyncCall() { 
    return $.Deferred().resolve().promise(); 
} 

asyncCall().then(function() { 
    var supported = document.queryCommandSupported('copy'); 
    if (supported) { 
     // ... select action 
     document.execCommand('copy'); 
    } 
}); 
+1

Bu işe yaramaz. Eğer hala işe yarıyorsa, bir plunker sağlamayı düşünün mü? –

İlgili konular