google chrome 拡張機能と外部ドメイン

google chromeで拡張機能を作ってみようと思って、ドットインストールを一通り見て作ってみようと思ったんですね。で、まずはjQueryを使った普通のhtmlで動くものを作ってから、google chrome拡張機能に移行しようと考えていました。

jQueryと外部ドメイン

まず、jQueryでつまずいたのが、外部ドメインからのデータ取得ですね。jQuery.ajaxでURL指定してデータをとって来ようとしたら、次のようなエラーが出ました。

XMLHttpRequest cannot load "指定したURL". No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.

外部サイトはダメなのかと思って、回避策を探していたら一番簡単そうなのが、これです。「jquery.xdomainajax.js」というのをダウンロードして読み込むだけ。あとは、普通のajaxの使い方でOKです。

jquery で クロスドメイン 外部ドメインのファイルにアクセス - まとめーたー

なんでこれでOKになるのかはよくわからないけど、中身を見ると、「Yahoo! Query Language」っていうのをかましてなんかうまいことやってるみたいですね(適当)。

ただ、話はこれで終わらないんですけどね。

google chrome 拡張機能と外部ドメイン

続いて、google chrome拡張の作成なんですが、ここはさらに外部のデータのやり取りが厳しく制限されていて、そもそもjQueryをCDN使って読み込んでいたんですが、これもダメみたいなんですね。なので、一度ちゃんとダウンロードしてローカルに落として読み込むようにしました。それが終わった後もまだエラーが出るんですね。「Yahoo! Query Language」を使っているところがどうやら怪しいわけです。ここでエラーが出てたんですね。

ここでエラーが出てたら、もう外部にアクセスできないじゃないか、とまたいろいろ調べてみて、参考になる記事を見つけました。「ChromeAppsでの外部リソースの扱い方」に書いてある通り、どうやら、XMLHttpRequestを使えばよいっぽいです。これを使うのであれば、もはやjquery.xdomainajax.jsすら使う必要がないわけですね。直接書いちゃいます。紹介したページはimgの例ですが、サイトの全体が対象である場合は、次のように書けばいけました。permissionsの設定をすることもお忘れなく。

    var xhr = new XMLHttpRequest();
    xhr.open('GET', "対象のURL", true);
    xhr.onload = function(e) {
      処理
    };
    xhr.send();
前の記事:
[web]アメブロは3カラムが一番いいんだろうな
次の記事:
OneNoteで僕がやりたかったこと全部できた