在PhantomJS中获得page.injectJs()工作时遇到麻烦

Having trouble getting page.injectJs() to work in PhantomJS

本文关键字:工作 遇到 麻烦 injectJs PhantomJS page      更新时间:2023-09-26

我的代码中有以下内容:

phantom.createPage(function(page){
    page.onCallback = function(data) {
        console.log("ph callback: ", data);
    };
    page.open(req.query.testUrl, function(status){
        if(status !== 'success'){
            page.close();
            res.status(500)
                .send('Page "' + testUrl + '" could not be loaded.')
                .end();
            return;
        }
        var result = page.injectJs('lib/my-test-script.js');
        console.log('injectJS: ', result);
        page.evaluate(function(){
            window.callPhantom(window.mocha.constructor.name);
        }, function(){
            console.log('finished');
            page.close();
            res.json({status: status});
            res.end();
        });
    });
});

console.log('injectJS: ', result);是输出"injectJS: undefined",而不是明确false的文档说这里:

http://phantomjs.org/api/webpage/method/inject-js.html

此外,我已经验证了我的-test-script.js在那里使用fs.readDir(),但似乎我的代码根本没有被注入,更不用说,我从来没有得到page.onCallback()的控制台输出。

在这一点上我完全迷路了。我显然做错了什么,但我不知道是什么。如有任何帮助,不胜感激。

相关GitHub问题

你正在使用node.js和PhantomJS(可能是PhantomJS -node)之间的桥接,所以PhantomJS文档不会直接应用。

所有桥接函数(基本上所有的PhantomJS函数)如果还没有这样做,就会接受一个额外的回调。这在桥的文档中的功能细节中有描述。injectJs也是如此。此外,注册到事件的方式也不同:

page.set("onCallback", function(data) {
    console.log("ph callback: ", data);
});
...
page.injectJs('lib/my-test-script.js', function(){
    page.evaluate(function(){
        window.callPhantom(window.mocha.constructor.name);
    }, function(){
        console.log('finished');
        page.close();
        res.json({status: status});
        res.end();
    });
});