弁財天

ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」

Chromiumに「Mouseover Translate English-Japanese EX」をポーティングw update3

Mouseover Translate English-Japanese EXを勝手にメンテちう
の続き。

Firefoxで動作してた「Mouseover Translate English-Japanese EX」をChromiumに移植してみた。
Chromiumのバージョン: 60.0.3099.0(Official Build) (64 ビット)

Mouseover TransrationがChromiumで動かない。仕様が微妙に違うのか?

ChromiumのGreasemonkey互換ツールのTampermonkey 4.3.6を導入。

Chromiumの拡張にするときは、しかし、GM_getValue()、GM_setValue()、GM_registerMenuCommand()、GM_log()はないのでダミー作成する必要がある。 Tampermonkeyは互換性があるのでこれは不要。

// Dummy for Chromium...
function GM_getValue(name, def) {
	GM_log('GM_getValue(' + name + ", " + def + ")...");
	return (def || '({})');
}

function GM_setValue(name, def) {
	GM_log('GM_setValue(' + name + ", " + def + ")...");
}

function GM_registerMenuCommand(name, sub) {
	GM_log('GM_getValue(' + name + ", " + sub + ")...");
}

function GM_log(msg) {
	console.log('GM_log(' + msg + ")...");
}

Tampermonkeyを使わない場合はマウスのポインター周辺にJavascriptでウィンドウを表示する仕様が何か変わったのか?このスクリプトも将来動かなくなるかもw

デプリケートになった with statement をどう書き直せばいいのかわからないw。
stackoverflow.com→"with” keyword in javascript [duplicate]

JavaScript's with statement was intended to provide a shorthand for writing recurring accesses to objects. So instead of writing

ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing = true;
ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang = true;
You can write

with (ooo.eee.oo.ah_ah.ting.tang.walla.walla) {
    bing = true;
    bang = true;
}
That looks a lot nicer. Except for one thing. There is no way that you can tell by looking at the code which bing and bang will get modifed. Will ooo.eee.oo.ah_ah.ting.tang.walla.walla be modified? Or will the global variables bing and bang get clobbered? It is impossible to know for sure...

If you can't read a program and be confident that you know what it is going to do, you can't have confidence that it is going to work correctly. For this reason, the with statement should be avoided...
あ、これだわ。

stackoverflow.com→popup window in Chrome extension
JavaScriptから簡単にポッポアップさせないように仕様が変わっているw
そのバックグラウンド・ページも推奨されなくなりイベント・ページが推奨されている。イベントだけどプロパティ名は”background”w。(´・ω・`)知らんがな。

stackoverflow.com→How to communicate between popup.js and background.js in chrome extension?
background.jsとpopup.jsでpostMessage()とonMessage.addListener()で通信するとかw。

よんちゅうブログ→Chrome拡張では、Background pages よりも Event pages を使用したほうが良い

stackoverflow.com→Text selection and bubble overlay as Chrome extension
マウスのDownでポッポアップしてボタンを離すとポッポアップが消える。

code.google.com→select-actions - default
テキストをドラッグして選択すると何やらリンクのリストが出現するとか。

stackoverflow.com→Chrome Extension how to send data from content script to popup.html

Imagict Popup English/Japanese Dictionary - Chrome Web Store
これの0.1.2_0/js/content_script.jsのfunction getWord(evt)をまんま使わせて貰った。



設定ダイアログをコメントアウトw。なのでプログラムのデフォルト値をいじくるしかないかもw。
chromium_mouseover.user.js

「ScriptBlock 1.4」だとスクリプトブロックしたページで「Mouseover Translate English-Japanese EX」が動かない。
No-Script Suite Lite 0.2.4ならスクリプトブロックしたページでも動作する。開発系の60.0.3101.0だとプルダウンのダイアログ表示が不安で使えない。なので開発チャンネルから安定チャンネルに切り替え。

chromiumの起動は Easy Script to download and run latest Linux buildを使う。

#! /bin/bash

GOOGLE_API_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.comyour_client_secret"
GOOGLE_DEFAULT_CLIENT_ID="xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com"
GOOGLE_DEFAULT_CLIENT_SECRET="xxxxxxxxxxxxxxxxxxxxxxxx"
export GOOGLE_API_KEY GOOGLE_DEFAULT_CLIENT_ID GOOGLE_DEFAULT_CLIENT_SECRET

BASEDIR=$(dirname $0)

$BASEDIR/latest/chrome --user-data-dir="$BASEDIR/user-data-dir" $* &> /dev/null &

APIキーをGOOGLE_API_KEY、GOOGLE_DEFAULT_CLIENT_ID、GOOGLE_DEFAULT_CLIENT_SECRETの環境変数で設定しておかないとログインして同期できない。
Win10とFedora25のChromiumにログインすると、一方のTampermonkeyみたいな「拡張」が他方の環境に反映されるのがすごいw。

TampermonkeyとMouseover Translateを使うだけならログインは必要ない。 独自の拡張を開発するときや、最新機能を使う時にだけ必要。


Tampermonkeyが初回実行時に許可を求めてくる。

Chromium 57.0.2987.133 はたまにCPUが暴走するなぁ。これはxfsが破損してたのが原因だった。無関係。 新しい kernel-ml-4.11.1-1.el7.elrepo.x86_64 は xfs が破損したときにシステムを急停止しない仕様になったのか? 代りに xfs_repair をかけるまで異常にCPU負荷の高い状態になる。と思ってたら本当にノートPCが壊れたw

chrlauncher-2.3-bin/64/chrlauncher.iniの

#ChromiumType=dev-codecs-sync
ChromiumType=stable-codecs-sync
に変更。Chromeにログインしなくてもマウスオーバーは使えるが、環境を瞬間的に同期できるログインを使ったほうが便利かもw。

Refused to load the script 'https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js' because it violates the following Content Security Policy directive: "script-src 'none'".

www.rt.com/:46 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-/Ty55YE3bebwRXHAVWjfkkwE/9Rr5DQFhPev2tFj6rM='), or a nonce ('nonce-...') is required to enable inline execution.

www.rt.com/:47 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-1gDiZB4cu/zNlSI9jCg3e9tVESVXe32xuHNF8Jp7qn0='), or a nonce ('nonce-...') is required to enable inline execution.

www.rt.com/:1 Refused to load the script 'https://ruptly-d.openx.net/w/1.0/jstag?nc=144751494-RT' because it violates the following Content Security Policy directive: "script-src 'none'".

www.rt.com/:62 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'none'". Either the 'unsafe-inline' keyword, a hash ('sha256-NYrwI6Jcr6JnEQrjpymnxGaEQl3c0JZ8oNkpU7GChU0='), or a nonce ('nonce-...') is required to enable inline execution.
rt.comは複数の広告サイトのスクリプトがロードされる。このどれかスクリプトを間男攻撃で細工されるとページ全体のJavaScriptの読み込みが文法エラーになって何もかも動かなくなってしまうw。
サイバー攻撃されーたw。
広告やJavascriptの類は、そのサイトを読む特定の人物を妨害する為にあるのだw。

FirefoxのNoScript 5.0.4の画面からドメイン名を拾う。

chromiumだとメニュー、その他のツール、デベロッパーツール、sourceのタブで使ってるJavaScriptのサイトをみてブロックするリストに追加していく。

ここでdnsmasq登場w。
/etc/dnsmasq.d/rtcom.conf

#address=/rt.com/127.0.0.1
#address=/ajax.googleapis.com/127.0.0.1
address=/taboola.com/127.0.0.1
address=/yandex.ru/127.0.0.1
address=/imgsmail.ru/127.0.0.1
address=/pingdom.net/127.0.0.1
address=/openx.net/127.0.0.1
address=/addthis.com/127.0.0.1
address=/scorecardresearch.com/127.0.0.1
address=/chartbeat.com/127.0.0.1 # ←追加 2017/07/26 w
address=/static.chartbeat.com/127.0.0.1 # ←追加 2017/07/26 w
address=/chartbeat.net/127.0.0.1 # ←追加 2017/07/26 w
address=/streamrail.com/127.0.0.1
address=/mail.ru/127.0.0.1
address=/spot.im/127.0.0.1 # ←ふつうドメイン名変えてくるか?2017/05/26 w
address=/spots.im/127.0.0.1 
address=/tru.am/127.0.0.1
address=/counter.yadro.ru/127.0.0.1 # ←追加 2017/07/26 w
address=/www.tns-counter.ru/127.0.0.1 # ←追加 2017/07/26 w
#address=/googletagservice.com/127.0.0.1
dnsmasq側でブロックするのがわかりやすくて単純w。
ここまでやるとサイバー攻撃を回避、rt.comを正常に読み込み、Mouseover Translateも動作させることができる。

投稿されたコメント:

コメント
コメントは無効になっています。