[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
質問事項
webdriver.ioを使用して私の反応アプリをテストするために、私はphantomjsを使用してそれを起動する必要があります。
最初はwebdriver.ioに問題があると思ったのですが、PhantomJSはレンダリングしようとすると空白のページを返してくることに気づきました。
テストするために、次のjavascriptファイルを書きました。
var page = require('webpage').create();
var args = require('system').args;
var output_file = 'example.png', url = args[1];
t = Date.now();
var width = 1440;
var height = 900;
page.viewportSize = { width: width, height: height };
page.paperSize = {
format: 'A4',
orientation: 'landscape',
margin: { left: '1cm', right: '1cm', top: '1cm', bottom: '1cm' }
};
console.log(url);
page.onConsoleMessage = function(msg, lineNum, sourceId) {
console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};
page.onLoadFinished = function (status) {
window.setTimeout(function () {
try {
page.evaluate(function (w, h) {
document.body.style.width = w + 'px';
document.body.style.height = h + 'px';
}, width, height);
t = Date.now() - t;
console.log('Loading ' + url);
console.log('Loading time ' + t + ' msec');
page.clipRect = {top: 0, left: 0, width: width, height: height};
page.render(output_file);
}
catch (e) {
status = e.message;
}
console.log(status + ';;' + output_file);
phantom.exit();
}, 10000);
};
try {
page.open(url);
console.log('loading');
}
catch (ex) {
console.log(ex.message);
phantom.exit();
}
を、このように立ち上げています。
phantomjs test.js http://localhost:8080
でも、何をやってもダメ。
example.png
は常に空です。
現在、React 0.14.7とphantomjs 2.1.1を使っています。なぜ私のアプリをレンダリングできないのか、誰か心当たりはありませんか?
PS: 記載していませんが、chromeやfirefoxでは問題ありません。
解決方法は?
おそらく、PhantomJSでES6がサポートされていないことに関係があると思います。確認するために、私は ページ.onError() コールバックをスクリプトに追加し(いつも便利!)、いくつかのReactのサンプルサイトを開くと、このエラーが表示されます。
ReferenceError: Can't find variable: Symbol
Symbol をポリフィルするためには インジェクト a コア.js スクリプトは、この優れた パッケージ を、ターゲットURLを読み込む前にページに挿入します。
page.onInitialized = function() {
if(page.injectJs('core.js')){
console.log("Polyfills loaded");
}
}
しかし、それは外部のサイトを開く場合の話です。テストしているサイトがあなたの開発下にある場合(localhost url が示すように)、おそらく次のように babel を設定するだけで済むでしょう。 この回答 .
関連
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み】Uncaught ReferenceError。Firebase は定義されていません。
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] なぜJavaScriptのeval関数を使うとダメなのか?
-
[解決済み】ReactJS - "setState "が呼ばれるたびにrenderが呼び出されるのですか?
-
[解決済み】ReactJSを使用して入力フィールドの値を取得する方法は?
-
[解決済み] PhantomJSを使ったフォームの送信方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】Redux TypeError: 未定義のプロパティ 'apply' を読み取れない
-
[解決済み】DOMException: サポートされているソースが見つからなかったため、読み込みに失敗しました。
-
[解決済み】WebSocket接続に失敗しました。WebSocket のハンドシェイク中にエラーが発生しました。予期しない応答コードです。400
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?