Open richardmcmillen opened 2 years ago
This one is interesting. I thought this type of buttons didn't work because they needed user interaction. If you open the devtools and try to click the button with rango you get Uncaught (in promise) DOMException: Clipboard write was blocked due to lack of user activation.
. The funny thing is that this only happens the second time. So it might be useful to implement what you suggest.
It is interesting, I can also see the issue whenever I haven't interacted with a page for some time and then try to use the rango hint. So it can also fail on the first attempt.
I also don't get the error whenever I have just clicked the mouse manually (anywhere on the screen) just before issuing the command to rango, I guess this would count as recent user activation.
https://github.com/philc/vimium/issues/2521 This issue and the various issues linked off it are full of people complaining about firefox copy issues in Vimium.
Yeah, I'll implement it but I don't think we are going to get consistent behavior.
I don't think that vimium issue has anything to do with this. We do have consistent copying/pasting to the clipboard, we do that for every command
I solved this one but as anticipated we still get the DOMException most of the time. I think we can leave this issue open for anyone that bumps into that issue but change the title to reflect what's actually happening
I tried to catch the error to warn the user when it fails by listening to window.onerror but that doesn't seem to work for DOMExceptions
In Chrome this never works because I have to send the response back to talon before I execute the command. Since this really works anyway I don't think it's a big issue
I've thought of a way to partially solve this by handling known cases. For example, github uses a web component called clipboard-copy
. I would need to intercept clicks to these elements and copy the value to the clipboard the same way I do for copy link
. This case seems easy enough. I suspect other cases will be more complex. If you find more of these cases post them here to see how I could handle them.
I found this random page you can see the issue from https://github.github.io/clipboard-copy-element/examples/
abc
for examplexyz
Result will be
abc
, when the desired contents isxyz
.When rango receives a request and performs its action, before it writes the response message it could inspect the clipboard again and if it isn't still the original request then send the current contents back to talon in the response object hopefully allowing Talon to set this as clipboard contents and not the original content before the action.