这个问题与SO中有关复制到剪贴板的其他问题有所不同,因为我想在书签中运行一个函数,然后将该结果复制到剪贴板。 而且,如果没有外部库,可以在书签Javascript中进行吗?
下面的书签从当前页面创建一个HTML链接,然后打开一个新的浏览器选项卡,并将HTML链接放入一个可以用键盘复制的文本区域。
但是,我如何跳过打开窗口并复制的步骤,但直接转到剪贴板?使用document.execCommand('copy')
?其他方法?是否可以在没有外部库的情况下执行此操作并使用bookmarklet Javascript进行此操作?
在新标签页中创建页面链接的Bookmarklet:
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
我可以在名为h
的变量中看到生成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
如何将函数内容(HTML链接)直接写入剪贴板?
答案 0 :(得分:0)
问题Copy text to clipboard from bookmarklet未指定是否允许使用外部库,并且所有现有答案都需要外部库。
想要在没有外部库的情况下执行此操作的附加约束需要不同的方法。我在其他问题上也提供了以下答案,但它也适用于这种情况,因为它不使用外部库。
Github Gist中有一个不错的小书市,可以the core of what you want - 复制到剪贴板。它不使用任何外部库,我认为这是一个优势。
正如所写,它复制了一些静态文本,但是在底部它讨论了如何使其适应其他用途,例如复制页面标题。
普通的香草版在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");
Gist也有预先缩小的代码。