2016-12-03 35 views
1

这个问题与SO中有关复制到剪贴板的其他问题不同,因为我想在小书签中运行一个函数,然后将该结果复制到剪贴板。 而且,这可能没有外部库,并且在bookmarklet Javascript内部执行它?如何从没有外部库的Javascript小书签复制到剪贴板?

下面的小书签从当前页面创建一个HTML链接,然后打开一个新的浏览器选项卡,并将HTML链接放入可用键盘复制的文本区域。

但是,如何跳过打开窗口和复制的步骤,但直接进入剪贴板?通过使用document.execCommand('copy')?其他方法?是否有可能做到这一点没有外部库,并与bookmarklet Javascript呢?

小书签,创建一个新的标签页链接:所谓h

javascript:function htmlEscape(s){s=s.replace(/&/g,'&');s=s.replace(/>/g,'>'); 
s=s.replace(/</g,'<');return s;} function linkEscape(s){s=s.replace(/&/g,'&'); 
s=s.replace(/"/,'"');return s} h = '<a href="' + linkEscape(location.href) + '" target="_blank"> 
<span class="tooltip" title="' + htmlEscape(document.title) + '">' + htmlEscape(document.title) 
+ '</span></a>'; with(window.open().document){write(h+'<form name=f> 
<textarea name=a rows=5 cols=80 wrap=hard>'+htmlEscape(h)+'</textarea></form>'); 
close(); f.a.select(); } void 0 

我可以看到生成的HTML作为,它出现的部分,在一个变量:

javascript:function htmlEscape(s){s=s.replace(/&/g,'&');s=s.replace(/>/g,'>'); 
s=s.replace(/</g,'<');return s;} function linkEscape(s){s=s.replace(/&/g,'&'); 
s=s.replace(/"/,'"');return s} h = 

我可以看到打开新窗口的那部分功能:

with(window.open().document){write(h+'<form name=f><textarea name=a rows=5 
cols=80 wrap=hard>'+htmlEscape(h)+'</textarea></form>'); close(); f.a.select(); } void 0 

我该怎么做w将函数的内容 - HTML链接 - 直接写入剪贴板?

+1

可能的副本[从bookmarklet复制到剪贴板的文本](http://stackoverflow.com/questions/5046972/copy-text-to-clipboard-from-bookmarklet) – t0mm13b

+0

投票关闭,因为这是[这个问题](http://stackoverflow.com/questions/5046972/copy-text-to-clipboard-from-bookmarklet)。在发布问题之前,请使用本网站上的搜索工具。 – t0mm13b

+0

使用clipboard.js https:// clipboardjs。com/ – developernator

回答

0

问题Copy text to clipboard from bookmarklet没有指定是否允许外部库,并且所有现有的答案都需要外部库。

想要在没有外部库的情况下执行此操作的附加约束需要采用不同的方法。我在下面的另一个问题上也提供了答案,但它也适用于这种情况,因为它不使用外部库。

在Github Gist有一个不错的小书店,the core of what you want - 复制到剪贴板。它不使用任何外部库,我认为这是一个优点。

正如所写的,它复制了一些静态文本,但向底部讲述了如何将其适用于其他用途,例如复制页面标题。

在没有任何修改的情况下,普通的vanilla版本在Chrome 61中运行得非常好。但请务必阅读评论;有些人有建议让它在其他浏览器和场景下工作。

这里是我测试过,已经微细化以及准备转成书签的代码:

javascript:!function(a){var b=document.createElement("textarea"),c=document.getSelection();b.textContent=a,document.body.appendChild(b),c.removeAllRanges(),b.select(),document.execCommand("copy"),c.removeAllRanges(),document.body.removeChild(b)}("Text To Copy"); 

吉斯特有-缩小的预代码。