无法让 page.injectJs() 在 PhantomJS 中工作

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

我的代码中有以下内容:

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

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

获取控制台输出

此时我完全迷路了。我显然做错了什么,但我不知道它可能是什么。任何帮助将不胜感激。

关联GitHub Issue.

您正在 node.js 和 PhantomJS(可能是 phantomjs-node)之间使用桥梁,因此 PhantomJS 文档不能直接应用。

所有桥接函数(基本上是所有 PhantomJS 函数)都需要一个额外的回调,如果它们还没有这样做的话。这在桥文档中的 Functionality details 下进行了描述。 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();
    });
});