ブラウザで見たURLを記録したい

2015-08-13
blog

自分が見たURLを記録していきたい。そのためにGoogle Chromeのextensionを書いてみる。

どんなページに対してもなんか動作させたい場合には、content_scriptsmatchesに以下のように書けばよいらしい: manifest.json

{
"manifest_version": 2,
"name": "UrlLogger",
"description": "Log URL history which you see.",
"version": "0.1",
"content_scripts": [{
"matches": ["http://*/*", "https://*/*"],
"js": ["myscript.js"]
}],
"permissions": [
"http://localhost/"
]
}
  • mathceshttp://*/*としてやると全てのページにマッチする。httpsも同様
  • jsに指定したスクリプトが実行される
  • permissionsにURLの送り先のホストを指定しておく

実行されるスクリプトで、ページのURLをどっかに送ってやる。XHRを使う:

// myscript.js
(function() {
'use strict';
var page_url = location.href;
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:8080/?url=' + encodeURIComponent(page_url), true);
xhr.send();
})();

ただ問題があって、httpのサイトを見た時には上のコードで送れるけど、httpsのサイトだと

> Mixed Content: The page at ‘https://www.youtube.com/‘ was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint ‘http://localhost:8080/?url=https%3A%2F%2Fwww.youtube.com%2F‘. This request has been blocked; the content must be served over HTTPS.

などというエラーが出てしまいログできない。httpsのページからhttpのXHRは投げられないらしい。JSONPでもだめで、これを回避するには送り先がhttpsを受け付けられるようにする必要があるが、面倒なのでどうしたものか…。