mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Browser viewer: Try using document.execCommand to copy since it works on non-secure origins as well
This commit is contained in:
parent
20e84ebcc8
commit
87629e32a7
@ -871,6 +871,13 @@ class IframeBoss:
|
|||||||
select_crw(crw)
|
select_crw(crw)
|
||||||
|
|
||||||
def copy_selection(self):
|
def copy_selection(self):
|
||||||
|
if not runtime.is_standalone_viewer:
|
||||||
|
try:
|
||||||
|
if document.execCommand('copy'):
|
||||||
|
return
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
s = window.getSelection()
|
s = window.getSelection()
|
||||||
text = s.toString()
|
text = s.toString()
|
||||||
if text:
|
if text:
|
||||||
|
@ -84,6 +84,29 @@ class ReadUI:
|
|||||||
ui_operations.open_url = def(url):
|
ui_operations.open_url = def(url):
|
||||||
window.open(url, '_blank')
|
window.open(url, '_blank')
|
||||||
ui_operations.copy_selection = def(text, html):
|
ui_operations.copy_selection = def(text, html):
|
||||||
|
if not html:
|
||||||
|
# try using document.execCommand which on chrome allows the
|
||||||
|
# copy on non-secure origin if this is close to a user
|
||||||
|
# interaction event
|
||||||
|
active_elem = document.activeElement
|
||||||
|
ta = document.createElement("textarea")
|
||||||
|
ta.value = text
|
||||||
|
ta.style.position = 'absolute'
|
||||||
|
ta.style.top = window.innerHeight + 'px'
|
||||||
|
ta.style.left = window.innerWidth + 'px'
|
||||||
|
document.body.appendChild(ta)
|
||||||
|
ta.focus()
|
||||||
|
ta.select()
|
||||||
|
ok = False
|
||||||
|
try:
|
||||||
|
ok = document.execCommand('copy')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
document.body.removeChild(ta)
|
||||||
|
if active_elem:
|
||||||
|
active_elem.focus()
|
||||||
|
if ok:
|
||||||
|
return
|
||||||
if not window.navigator.clipboard:
|
if not window.navigator.clipboard:
|
||||||
return error_dialog(_('No clipboard access'), _(
|
return error_dialog(_('No clipboard access'), _(
|
||||||
'Your browser requires you to access the Content server over an HTTPS connection'
|
'Your browser requires you to access the Content server over an HTTPS connection'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user