質問編集履歴
5
@run-at document-end を有効にすると、stackoverflowのコードの色や投稿する機能が使えなくなったり、ウェザーニュースの画像が正常に読み込めない等、汎用的な実用性はない為。
test
CHANGED
File without changes
|
test
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
// @version 1.3.5
|
19
19
|
// @description ←最も不要だと思うが、これ設定しないと叱られる
|
20
20
|
// @match *://*/*
|
21
|
-
// @run-at document-
|
21
|
+
// @run-at document-start
|
22
22
|
// @connect translate.google.com
|
23
23
|
// @grant GM_xmlhttpRequest
|
24
24
|
// ==/UserScript==
|
@@ -119,11 +119,11 @@
|
|
119
119
|
server.rendered.push(container);
|
120
120
|
googleUrl += `&tk=${token(text)}`;
|
121
121
|
if (isJapan_customized_by_me(text)) {
|
122
|
-
// 英語に対して日本語変換処理
|
122
|
+
// 英語に対して日本語変換処理?
|
123
123
|
ajax(googleUrl + '&tl=en&q=', encodeURIComponent(text), 1, container);
|
124
124
|
// ajax(googleUrl + '&tl=ja&q=', encodeURIComponent(text), 1, container);
|
125
125
|
} else if (countOfWord(text) !== 1) {
|
126
|
-
// 多言語に対して日本語変換処理
|
126
|
+
// 多言語に対して日本語変換処理?
|
127
127
|
ajax(googleUrl + '&tl=' + target_language + '&dt=t&q=', encodeURIComponent(text), 1, container);
|
128
128
|
}
|
129
129
|
}
|
4
サポートページを追記。もうかっつかつです...これ以上容易に削れない
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,11 +4,11 @@
|
|
4
4
|
いちいちwindow.openで翻訳サイトに飛ばされる工数をショートカットできるという事実に、たいへん意義と価値を感じて気に入って使っています。
|
5
5
|
|
6
6
|
しかし、`GM_xmlhttpRequest({ 何らかの通信処理 });`という形式にはめなければならず、現状ではTampermonkey系でしか使えない状態です。
|
7
|
-
ネットで調べた情報によれば、この特有の関数は `new XMLHttpRequest();`のような役割を担っているとの
|
7
|
+
ネットで調べた情報によれば、この特有の関数は `new XMLHttpRequest();`のような役割を担っているとの事だったので`new XMLHttpRequest();`に置き換えて、Tampermonkey系からの依存度を減らしたい(例えばブックマークレットとかからも実行できるようにしたい...etc)と考えています。
|
8
|
-
|
8
|
+
|
9
|
-
しかし、試してみても`null`「接続失敗」
|
9
|
+
しかし、試してみても`null`「接続失敗」という結果しか返ってきません。
|
10
|
-
|
10
|
+
|
11
|
-
この
|
11
|
+
この事に関してお詳しい方、ご教示お願いできればと思います。
|
12
12
|
|
13
13
|
### 該当のソースコード
|
14
14
|
`Tampermonkey`
|
@@ -24,7 +24,7 @@
|
|
24
24
|
// ==/UserScript==
|
25
25
|
|
26
26
|
//「// @connect」は、某サイトの機能をユーザーが使うか確認するストッパー(安全装置)を取り外すような役割があり、なくても煩わしいだけで使える。
|
27
|
-
// また、「// @connect」自体はTampermonkeyの設定「セキュリティ」→「@connect 文を確認: 」→「無効」に調整
|
27
|
+
// また、「// @connect」自体はTampermonkeyの設定「セキュリティ」→「@connect 文を確認: 」→「無効」に調整可能。
|
28
28
|
|
29
29
|
window.addEventListener('load', () => {
|
30
30
|
|
@@ -135,7 +135,7 @@
|
|
135
135
|
value = value.replace(/^\s+|\s+$/gi, ""); // 先頭と末尾のスペースは単語としてカウントされない
|
136
136
|
value = value.replace(/\s+/gi, " "); // 複数のスペースを 1 つのスペースに置き換え
|
137
137
|
var length = 0; //更新回数
|
138
|
-
var match = value.match(/\s/g); // 一致しない場合
|
138
|
+
var match = value.match(/\s/g); // 一致しない場合 null を返す
|
139
139
|
if (match) {
|
140
140
|
length = match.length + 1;
|
141
141
|
} else if (value) {
|
@@ -151,7 +151,7 @@
|
|
151
151
|
}
|
152
152
|
|
153
153
|
|
154
|
-
// Google 翻訳のトークン計算
|
154
|
+
// Google 翻訳のトークン計算
|
155
155
|
function token(a) {
|
156
156
|
const b = 406644;
|
157
157
|
const b1 = 3293161072;
|
@@ -202,7 +202,7 @@
|
|
202
202
|
'cookie': ''
|
203
203
|
};
|
204
204
|
|
205
|
-
//--------------------------------------------------------
|
205
|
+
//--------------------------------------------------------//
|
206
206
|
// 試した事 ↓
|
207
207
|
|
208
208
|
/*
|
@@ -220,7 +220,7 @@
|
|
220
220
|
xhr.send(null);
|
221
221
|
*/
|
222
222
|
|
223
|
-
//--↓ 以下から Tampermonkey依存の関数 ↓ -----------------
|
223
|
+
//--↓ 以下から Tampermonkey依存の関数 ↓ -----------------//
|
224
224
|
|
225
225
|
GM_xmlhttpRequest({
|
226
226
|
method: method,
|
@@ -238,7 +238,7 @@
|
|
238
238
|
}
|
239
239
|
});
|
240
240
|
|
241
|
-
//↑ 以上までがTampermonkey依存の関数 ↑ ---------------
|
241
|
+
//↑ 以上までがTampermonkey依存の関数 ↑ ---------------//
|
242
242
|
|
243
243
|
}
|
244
244
|
|
@@ -308,8 +308,10 @@
|
|
308
308
|
```
|
309
309
|
|
310
310
|
### 補足
|
311
|
-
|
311
|
+
追記ですが
|
312
312
|
Greasemonkeyとの互換性はありません。
|
313
313
|
Violentmonkeyとの互換性はあります。
|
314
314
|
|
315
|
-
|
315
|
+
ホームを追記します
|
316
|
+
https://www.tampermonkey.net/documentation.php#GM_xmlhttpRequest
|
317
|
+
|
3
説明するまでもない微々たること
test
CHANGED
File without changes
|
test
CHANGED
@@ -27,6 +27,7 @@
|
|
27
27
|
// また、「// @connect」自体はTampermonkeyの設定「セキュリティ」→「@connect 文を確認: 」→「無効」に調整できる。
|
28
28
|
|
29
29
|
window.addEventListener('load', () => {
|
30
|
+
|
30
31
|
'use strict';
|
31
32
|
var target_language = 'auto'; // 翻訳targetは、的を絞らず多言語に対応したいので auto
|
32
33
|
// 以下は元のURLから &tl=ja を語尾にくっつけただけ。↓
|
@@ -203,6 +204,7 @@
|
|
203
204
|
|
204
205
|
//---------------------------------------------------------//
|
205
206
|
// 試した事 ↓
|
207
|
+
|
206
208
|
/*
|
207
209
|
var xhr = new XMLHttpRequest();
|
208
210
|
xhr.onload = function (res) {
|
@@ -301,7 +303,6 @@
|
|
301
303
|
}
|
302
304
|
}; // 翻訳サーバーの終了
|
303
305
|
|
304
|
-
|
305
306
|
});
|
306
307
|
|
307
308
|
```
|
2
主に文章の段落的な区切りを1つ1つ、より強調する為に敢えて更にスペース追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -41,8 +41,9 @@
|
|
41
41
|
'margin:4px!important;' +
|
42
42
|
'cursor: pointer;' +
|
43
43
|
'';
|
44
|
-
|
45
|
-
|
44
|
+
|
45
|
+
icon.innerHTML = // <svg><path> がダラダラ長過ぎるので <img> に変更
|
46
|
+
'<img src="https://storage.googleapis.com/gweb-uniblog-publish-prod/images/Translate_logo.max-500x500.png" style="width:23px; height:23px; margin-top:5px;margin-left:5px; cursor: pointer; ">';
|
46
47
|
|
47
48
|
icon.setAttribute('style', '' +
|
48
49
|
'width:32px!important;' +
|
@@ -54,8 +55,9 @@
|
|
54
55
|
'position:absolute!important;' +
|
55
56
|
'z-index:2147483647!important;' +
|
56
57
|
'');
|
57
|
-
|
58
|
+
// DOM に翻訳アイコンを追加する
|
58
|
-
|
59
|
+
document.documentElement.appendChild(icon);
|
60
|
+
|
59
61
|
|
60
62
|
// マウス イベント: 選択したテキストが消えるのを防ぐ
|
61
63
|
document.addEventListener('mousedown', (e) => {
|
@@ -65,6 +67,7 @@
|
|
65
67
|
}
|
66
68
|
});
|
67
69
|
|
70
|
+
|
68
71
|
// 選択変更イベント: 選択したテキストをクリックすると、翻訳アイコンと翻訳パネルが非表示に。
|
69
72
|
document.addEventListener("selectionchange", () => {
|
70
73
|
if (!window.getSelection().toString().trim()) {
|
@@ -72,6 +75,7 @@
|
|
72
75
|
server.containerDestroy();
|
73
76
|
}
|
74
77
|
});
|
78
|
+
|
75
79
|
|
76
80
|
// マウス イベント: 選択したテキストが消えるのを防ぐ; 翻訳アイコンを表示、非表示に。
|
77
81
|
document.addEventListener('mouseup', (e) => {
|
@@ -95,6 +99,7 @@
|
|
95
99
|
server.containerDestroy(); // 翻訳コンテンツ パネルを破棄
|
96
100
|
}
|
97
101
|
});
|
102
|
+
|
98
103
|
|
99
104
|
// 翻訳アイコンクリックイベント
|
100
105
|
icon.addEventListener('click', (e) => {
|
@@ -111,10 +116,7 @@
|
|
111
116
|
container.style.left = document.body.clientWidth - 350 + 'px';
|
112
117
|
document.body.appendChild(container);
|
113
118
|
server.rendered.push(container);
|
114
|
-
|
115
|
-
|
116
119
|
googleUrl += `&tk=${token(text)}`;
|
117
|
-
|
118
120
|
if (isJapan_customized_by_me(text)) {
|
119
121
|
// 英語に対して日本語変換処理...?
|
120
122
|
ajax(googleUrl + '&tl=en&q=', encodeURIComponent(text), 1, container);
|
@@ -126,13 +128,11 @@
|
|
126
128
|
}
|
127
129
|
});
|
128
130
|
|
131
|
+
|
129
132
|
function countOfWord(str) {
|
130
133
|
var value = String(str);
|
131
|
-
|
132
134
|
value = value.replace(/^\s+|\s+$/gi, ""); // 先頭と末尾のスペースは単語としてカウントされない
|
133
|
-
|
134
135
|
value = value.replace(/\s+/gi, " "); // 複数のスペースを 1 つのスペースに置き換え
|
135
|
-
|
136
136
|
var length = 0; //更新回数
|
137
137
|
var match = value.match(/\s/g); // 一致しない場合は null を返す
|
138
138
|
if (match) {
|
@@ -143,10 +143,12 @@
|
|
143
143
|
return length;
|
144
144
|
}
|
145
145
|
|
146
|
+
|
146
147
|
function isJapan_customized_by_me(str) {
|
147
148
|
var reg = /^([\u4E00-\u9FA5]|[\uFF00-\uFF20]|[\u3000-\u301C])+$/;
|
148
149
|
return !!reg.test(str);
|
149
150
|
}
|
151
|
+
|
150
152
|
|
151
153
|
// Google 翻訳のトークン計算、token()
|
152
154
|
function token(a) {
|
@@ -172,6 +174,7 @@
|
|
172
174
|
return a.toString() + jd + (a ^ b);
|
173
175
|
}
|
174
176
|
|
177
|
+
|
175
178
|
// Google 翻訳のトークン計算、token()
|
176
179
|
function RL(a, b) {
|
177
180
|
const t = "a";
|
@@ -199,8 +202,7 @@
|
|
199
202
|
};
|
200
203
|
|
201
204
|
//---------------------------------------------------------//
|
202
|
-
// 試した事
|
205
|
+
// 試した事 ↓
|
203
|
-
|
204
206
|
/*
|
205
207
|
var xhr = new XMLHttpRequest();
|
206
208
|
xhr.onload = function (res) {
|
@@ -241,6 +243,7 @@
|
|
241
243
|
|
242
244
|
// この辺りの内容を大幅省略
|
243
245
|
|
246
|
+
|
244
247
|
// Google 翻訳エンジン
|
245
248
|
function google(rst, element) {
|
246
249
|
var json = JSON.parse(rst),
|
@@ -251,6 +254,7 @@
|
|
251
254
|
displaycontainer(html, element);
|
252
255
|
store_ajax(word, html, element);
|
253
256
|
}
|
257
|
+
|
254
258
|
|
255
259
|
function displaycontainer(text, element) {
|
256
260
|
element.innerHTML = text;
|
@@ -270,6 +274,7 @@
|
|
270
274
|
}
|
271
275
|
}
|
272
276
|
},
|
277
|
+
|
273
278
|
// 翻訳結果パネル DOM を生成 (この時点ではまだページに追加されていない)
|
274
279
|
container: function() {
|
275
280
|
var div = document.createElement('div');
|
@@ -295,6 +300,8 @@
|
|
295
300
|
return div;
|
296
301
|
}
|
297
302
|
}; // 翻訳サーバーの終了
|
303
|
+
|
304
|
+
|
298
305
|
});
|
299
306
|
|
300
307
|
```
|
1
Tampermonkey以外にスクリプトの互換性のあるツールについて
test
CHANGED
File without changes
|
test
CHANGED
@@ -27,14 +27,14 @@
|
|
27
27
|
// また、「// @connect」自体はTampermonkeyの設定「セキュリティ」→「@connect 文を確認: 」→「無効」に調整できる。
|
28
28
|
|
29
29
|
window.addEventListener('load', () => {
|
30
|
-
|
30
|
+
'use strict';
|
31
|
-
|
31
|
+
var target_language = 'auto'; // 翻訳targetは、的を絞らず多言語に対応したいので auto
|
32
|
-
|
32
|
+
// 以下は元のURLから &tl=ja を語尾にくっつけただけ。↓
|
33
|
-
|
33
|
+
var googleUrl = 'https://translate.google.com/translate_a/single?client=gtx&dt=t&dt=bd&dj=1&source=input&hl=auto&sl=auto&tl=ja';
|
34
|
-
|
34
|
+
var iconSize = 24;
|
35
|
-
|
35
|
+
var translationTestSize = 16;
|
36
|
-
|
36
|
+
var icon = document.createElement('div');
|
37
|
-
|
37
|
+
var word = '';
|
38
38
|
var style = '' +
|
39
39
|
'width:23px;' +
|
40
40
|
'height:23px;' +
|
@@ -105,14 +105,14 @@
|
|
105
105
|
// 新しい翻訳コンテンツ パネルを作成。
|
106
106
|
var container = server.container();
|
107
107
|
container.style.top = e.pageY + 'px';
|
108
|
-
if (e.pageX + 350 <= document.body.clientWidth) //コンテナ パネルの
|
108
|
+
if (e.pageX + 350 <= document.body.clientWidth) //コンテナ パネルの最大幅 250px。
|
109
109
|
container.style.left = e.pageX + 'px';
|
110
110
|
else
|
111
111
|
container.style.left = document.body.clientWidth - 350 + 'px';
|
112
112
|
document.body.appendChild(container);
|
113
113
|
server.rendered.push(container);
|
114
114
|
|
115
|
-
|
115
|
+
|
116
116
|
googleUrl += `&tk=${token(text)}`;
|
117
117
|
|
118
118
|
if (isJapan_customized_by_me(text)) {
|
@@ -216,7 +216,7 @@
|
|
216
216
|
xhr.send(null);
|
217
217
|
*/
|
218
218
|
|
219
|
-
//--↓ 以下から Tampermonkey依存の関数 ↓ ------------------
|
219
|
+
//--↓ 以下から Tampermonkey依存の関数 ↓ ------------------//
|
220
220
|
|
221
221
|
GM_xmlhttpRequest({
|
222
222
|
method: method,
|
@@ -234,7 +234,7 @@
|
|
234
234
|
}
|
235
235
|
});
|
236
236
|
|
237
|
-
//↑ 以上までがTampermonkey依存の関数 ↑ ----------------
|
237
|
+
//↑ 以上までがTampermonkey依存の関数 ↑ ----------------//
|
238
238
|
|
239
239
|
}
|
240
240
|
|
@@ -250,7 +250,6 @@
|
|
250
250
|
}
|
251
251
|
displaycontainer(html, element);
|
252
252
|
store_ajax(word, html, element);
|
253
|
-
// alert('送信成功');
|
254
253
|
}
|
255
254
|
|
256
255
|
function displaycontainer(text, element) {
|
@@ -271,7 +270,7 @@
|
|
271
270
|
}
|
272
271
|
}
|
273
272
|
},
|
274
|
-
|
273
|
+
// 翻訳結果パネル DOM を生成 (この時点ではまだページに追加されていない)
|
275
274
|
container: function() {
|
276
275
|
var div = document.createElement('div');
|
277
276
|
div.setAttribute('style', '' +
|
@@ -300,3 +299,9 @@
|
|
300
299
|
|
301
300
|
```
|
302
301
|
|
302
|
+
### 補足
|
303
|
+
ただ今、試したところ
|
304
|
+
Greasemonkeyとの互換性はありません。
|
305
|
+
Violentmonkeyとの互換性はあります。
|
306
|
+
|
307
|
+
|