无法让 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();
});
});
我的代码中有以下内容:
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();
});
});