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

标签 javascript node.js phantomjs headless-browser

我的代码中有以下内容:

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 在那里,但看起来我的代码根本没有被注入(inject),更不用说了,我从未从 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();
    });
});

关于javascript - 无法让 page.injectJs() 在 PhantomJS 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30403533/

相关文章:

javascript - Mobile Safari 选择 onclick 事件

javascript - 蒙哥错误: failed to connect to server [localhost:27017]

javascript - PhantomJS - 选择 html 元素

javascript - 为什么setInterval函数中的语句在Phantomjs中没有被执行?

Phantomjs 使用 fs.write 追加到文件

javascript - 在 Polymer 函数中使用变量

javascript - 设置特定大小后,Highcharts 图表在窗口调整大小事件上调整大小

javascript - 请求 Stack Overflow API 返回奇怪的响应

node.js - 我应该将所有子包保留在 package.json 中的单个版本上吗?

node.js - node http 和 express 监听区别