我正在使用 zeroclipboard 在用户脚本中为相当大的列表中的每一行添加一个“复制”链接。为了实现这一点,我使用了与此页上列出的方法类似的方法,其中当用户将鼠标悬停在行上时,将为每一行创建 ZeroClipboard.Client() 元素。这在 FireFox 中效果很好,但在 Chrome 中却不行。
另请注意:我将 ZeroClipboard.js 文件的内容复制到用户脚本本身,而不是将其包含在外部文件中。
这是为每个元素创建复制按钮的标记
<span style="color:blue; text-decoration:underline; cursor:pointer" id="copy_'+id+'" class="CopyLink" link="'+url+'" onmouseover="clipboard.add(this)">Copy</span>
这是添加剪贴板客户端对象的代码段:
function main(){
window.clipboard = {
load: function (){
if(!clipboard.initialized){
ZeroClipboard.setMoviePath("http://www.swfcabin.com/swf-files/1343927328.swf");
clipboard.initialized=true;
console.log("Clipboard intialized");
}
},
add: function(element){
clipboard.load();
var clip = new ZeroClipboard.Client();
console.log('Clipboard client loaded: ' + element.id);
clip.glue(element, element.parentNode);
console.log('Clipboard glued: ' + element.id);
clip.setText(element.getAttribute('link'));
console.log('Clipboard text set: ' + element.getAttribute('link'));
clip.addEventListener('complete',function(client,text) {
console.log('Clipboard copied: ' + text);//doesn't fire in chrome
});
clip.addEventListener('load',function(client) {
console.log('Clipboard loaded: ' + element.getAttribute('link'));
});
}
}
//other code in user script including injecting above markup
//as well as contents of ZeroClipboard.js
window.ZeroClipboard = { ... }
}
var script = document.createElement("script");
script.appendChild(document.createTextNode('('+main+')()'));
(document.head || document.body || document.documentElement).appendChild(script);
在此块中,当我将鼠标悬停并单击复制范围时,每个 console.log 都会在 FireFox 中触发,但在 chrome 中,除了“完整”侦听器触发之外的所有内容。通过使用此页面上的示例,我能够验证 ZeroClipboard 是否在我的 Chrome 中工作。我还能够验证 Flash 对象是否被添加到页面中的正确位置,但它根本没有响应点击。
由于该站点不再维护 zeroclipboard 代码,因此我希望有人可以帮助我。我认为在鼠标悬停时动态添加 chrome 中的嵌入式 Flash 对象可能存在一些问题,或者 chrome 与 firefox 中的用户脚本与greasemonkey 之间可能存在一些差异?任何帮助将不胜感激,谢谢