主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JavaScript: PhantomJSをいじる

                
tags: JavaScript
 PhantomJSで使うテストフレームワークを書いたあとでのメモ。


 PhantomJSではrequireという関数を通じてさまざまなAPIを利用できる。このrequireはWebPageインスタンス上では無効。WebPageインスタンス上ではブラウザと同様の環境条件が課されるのでそんな便利なものは使えず、ブラウザに実装されているのと同様のJavaScriptしか使えない。
var page = require('webpage').create();
page.evaluate(function () {var fs = require("fs");}); // error



 WebPageインスタンスには関数を渡してページ内でJavaScriptを実行できる。その際は引数も渡せる。引数としてはJSONシリアライズが可能なもののみ渡せる。
var page = require('webpage').create();
page.evaluate(function (str) {console.log(str);}, "foo");



 上記を踏まえてローカルファイルデータ(ここではディレクトリfilesに置いてあるとする)をWebPageインスタンス内でのJavaScriptで使うことを考えてみる。
var fs = require("fs");
var filesObj = {};
var files = fs.list("files/")
.filter(function(item) {
return [".", ".."].indexOf(item) == -1;
});
for (var p=0; p<files.length; p++) {
filesObj[files[p]] = fs.read("files/" + files[p]);
}
var page = require('webpage').create();
page.evaluate(function (files) {
for (var filename in files) {
console.log(filename + ":" + files[filename]);
}, filesObj);



 WebPageインスタンス内でJavaScriptを実行させるには上記のようにevaluateメソッドに関数を渡すという方法がある。スクリプトを文字列として持っている場合はevaluateJavaScriptというドキュメントにのっているメソッドを使えばいいかと思ったが実装が進んでないのか動作しない。ならばページ内にscriptタグで埋め込むという一般的な方法も一つとしてある。
page.evaluate(function (script) {
var scrEl = document.createElement("script");
scrEl.text = script;
document.body.appendChild(scrEl);
}, scriptStr);
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。