用谷歌浏览器不好使,说谷歌不支持了。说用火狐可以。又用火狐,但火狐也不好使。代码如下,但总是报错 TypeError: window.clipboardData is undefined。对了,还试了 zeroclipboard,好像也不好使。本人的 js 有点菜,才会一点,求大神稍加指点了。
// ==UserScript==
// @name 谷歌翻译 粘贴板
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://translate.google.cn*
// @grant GM_setClipboard
// @require https://cdn.bootcss.com/clipboard.js/2.0.4/clipboard.js
// ==/UserScript==
var source = document.getElementById('source');
source.onfocus = function() {
var w = window;
var txt=window.clipboardData.getData("text");
console.log(txt);
}
代码就是想让焦点一旦到了谷歌翻译网页的左边框时,就把左边框的内容替换为粘贴板的内容。但现在根本获取不到啊。
1
amiwrong123 OP 还是说,我得在火狐的配置文件里面改什么吗? about:config 里面的 clipboard.autocopy 已经被我改成 true 了,但还是不好使。
|
2
caocong 2019-07-08 17:06:19 +08:00
可以参考这个 api
https://developer.mozilla.org/zh-CN/docs/Web/API/Navigator/clipboard 粘贴没问题 但谷歌翻译简单往 id 为 source 的 textarea 设置文本或者往 text-dummy 这个 div 里放文本都没有用 |
3
vanton 2019-07-08 17:07:03 +08:00
用法不对,事件只有 cut、copy、paste。
```js var source = document.getElementById('source'); source.addEventListener("paste", function (e) { if (!(e.clipboardData && e.clipboardData.items)) { return; } for (var i = 0, len = e.clipboardData.items.length; i < len; i++) { var item = e.clipboardData.items[i]; if (item.kind === "string") { item.getAsString(function (str) { // 字符串 console.log(str); }) } else if (item.kind === "file") { var pasteFile = item.getAsFile(); // 文件 console.log(pasteFile); } } }); ``` |
4
caocong 2019-07-08 17:13:06 +08:00
document.getElementById("source").onfocus = e => {
navigator.clipboard.readText().then(clipText => { document.getElementById("source").value = clipText }))} 前提要打开这个页面的剪切板权限 |
5
amiwrong123 OP @caocong
谢谢,好使了。但好使粘贴板里的内容如果是日文,好像有编码问题。我再百度百度吧。代码就是 ```javascript document.getElementById("source").onfocus = function(){ navigator.clipboard.readText().then( clipText => {document.getElementById("source").value = clipText;}) } ``` |
6
amiwrong123 OP @caocong
我在看一下,能不能把粘贴板的内容,替换为谷歌翻译的右边框的内容(翻译后的内容)。 |
7
caocong 2019-07-08 18:09:58 +08:00
@amiwrong123
document.getElementById("source").onfocus = function(){ navigator.clipboard.readText().then( clipText => { document.getElementById("source").value = clipText setTimeout(()=> navigator.clipboard.writeText(document.getElementsByClassName('tlid-translation')[0].children[0].innerText),2000) }) } writeText()就可以了 延时 2000ms 看你的网速了 或者用个循环取结果的值也行 |
8
amiwrong123 OP @caocong
刚才我还在想怎么解决,对话,延时就好了。谢谢大佬。 但如果左边框有换行符,有边框 tlid-translation 里面的 children 不止一个,类似于: <span title="" class="">遷移 Transition to the Audio </span> <br> <span title="" class="">遷移 Transition to the Audio </span> 这个好像不好弄,看语法好像没法写循环啊 |
9
amiwrong123 OP @caocong
```javascript document.getElementById("source").onfocus = function(){ navigator.clipboard.readText().then( clipText => {document.getElementById("source").value = clipText;}) setTimeout(()=> { var a = document.getElementsByClassName('tlid-translation')[0]; var result = '' //console.log(a.children.length); for (var i = 0; i < a.children.length; i++){ //console.log(a.children[i].tagName); if(a.children[i].tagName == 'SPAN' ) {//console.log(a.children[i].innerText); result += a.children[i].innerText; }else{ result += '\n'; } } navigator.clipboard.writeText(result)},2000); }; ``` 原来大括号可以把语句框起来,这样就可以了。这样就解决了左边框有换行的情况。再次感谢啦。 |