web-dev-qa-db-ja.com

CasperJSおよび「安全でないJavaScriptがURLでフレームにアクセスしようとしています」エラー

入力で書かれた電子メールを検証するjavascriptを使用した単純なページがあります。

email.html:

<!DOCTYPE html>
<html>
    <head>
        <title>Email validation</title>
        <script src="email.js"></script>
    </head>
    <body>
        <span style="padding: 5px;">
            <input type="text" id="email-input" placeholder="Email..."></input>
        </span>
    </body>
</html>

email.js:

var checkEmail = function() {
    var regexp = /BIG_REGEX/;
    var email = document.getElementById('email-input').value;
    if (email === '') 
        removeFrame();
    else if (regexp.test(email))
        drawFrame('green');
    else
        drawFrame('red');
};

var removeFrame = function() {
    var input = document.getElementById('email-input');
    input.parentNode.style.backgroundColor = input.parentNode.parentNode.style.backgroundColor;
};

var drawFrame = function(color) {
    var input = document.getElementById('email-input');
    input.parentNode.style.backgroundColor = color;
};


window.onload = function() {
    document.getElementById('email-input').onkeyup = checkEmail;
};

CasperJSを使用して検証機能をテストしたい。これが私のテストケースです:

test/validator.test.js:

var fillEmail = function(browser, email) {
    browser.sendKeys('#email-input', email, {reset: true});
};

var getValidation = function(browser) {
    var color = browser.evaluate(function () {
        return document.getElementById('email-input').parentNode.style.backgroundColor;
    });
    return color;
};

var validate = function(browser, email) {
    fillEmail(browser, email);
    return getValidation(browser);
};

casper.test.begin('Validation testing', function suite(test) {
    casper.start('http://localhost:8000/email.html', function() {
        test.assertEquals(validate(this, '[email protected]'), 'green', '[email protected]');
        test.assertEquals(validate(this, 'vnbgfjbndkjnv'), 'red', 'vnbgfjbndkjnv');
    }).run(function() {
        test.done();
    });

});

しかし、casperjs test test/validator.test.jsを使用してテストを実行すると、テストに関する情報の後に常にエラーが発生します。

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///C:/Users/home/AppData/Roaming/npm/node_modules/casperjs/bin/bootstrap.js. Domains, protocols and ports must match.

どうしましたか?

PhantomJSバージョン:1.9.8

24
michaeluskov

最近のPhantomJS(1.9.8)では、このエラーメッセージが導入されています。 PhantomJSを終了するときにログ行を混乱させる以外は、実際の問題は発生しません。

未リリースの1.9ブランチで修正されています: https://github.com/ariya/phantomjs/pull/1272

18
Jakozaur

同じエラーが発生したため、phantomjs 1.9.91.9.8から)に更新してみました。ただし、1.9.9をインストールしようとするとインストールエラーが発生したため、phantomjs 1.9.7に変更し、このエラーを修正しました。したがって、これはphantomjs 1.9.8で導入された問題のようです。

1
noobie

この問題はphantomjsバージョン1.9で修正されています

phantomjs": "^1.9.9"

casperJs

casperjs --ssl-protocol=tlsv1 test  run.js
1
PPB

次のような別の方法でファントムを終了することでこれを回避するいくつかの回避策があります。

   casperjs --ssl-protocol=tlsv1 test  run.js

助けにならないものと

setTimeout(function(){
    phantom.exit();
}, 0);

の代わりに

this.exit();

何もうまくいきませんでした!!!

PhantomJSのいくつかの異なるバージョンを試しました。私の出力はJSONとして受信され、JSON.parse(stdout)の試行に何時間も失敗した後、あきらめなければなりませんでした。 「F」と思ったのは、「F」エラーを処理するためです。

私が出る前にとても簡単

this.echo(',{"error":"');

そして私が送った後

this.echo('"}]');

結果が返ってきたら、改行をすべて置き換えてエラーを無視します

stdout = stdout.replace(/(?:\r\n|\r|\n)/g, '');

補足:この問題はファントム1.9.9で修正しようとしましたが、代わりに、CasperJSと互換性のないファントム2.0の構築に焦点を当てました

0