Предоставление переменных из вызова PhantomJS в injectJS
Я следил за примерами для инъекции jQuery со страницы начала работы, и это работает просто отлично. У меня есть локальная копия jQuery в том же каталоге и делаю что-то вроде этого...
if(page.injectJs('jquery.min.js')) {
page.evaluate(function(){
//Use jQuery or $
}
}
когда я пытаюсь ввести свой собственный скрипт(ы), ни одна из функций мне не доступна. Скажем, у меня есть сценарий под названием myScript.js, который только что
function doSomething() {
// doing something...
}
Я не могу использовать doSomething, как...
if(page.injectJs('myScript.js')) {
console.log('myScript injected... I think');
page.evaluate(function() {
doSomething();
});
} else {
console.log('Failed to inject myScript');
}
Я пробовал
window.doSomething = function() {};
и
document.doSomething = function() {};
также не повезло, а также пытается вызвать их с помощью окна.сделать() или документ.doSomething () на следующей странице.оценивать.)(
1 ответов
для меня работает следующее, возможно, какая-то другая часть вашей логики приложения неверна:
inject.coffee
page = require('webpage').create()
page.onConsoleMessage = (msg) -> console.log msg
page.open "http://www.phantomjs.org", (status) ->
if status is "success"
page.includeJs "http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js", ->
if page.injectJs "do.js"
page.evaluate ->
title = echoAndReturnTitle('hello')
console.log title
phantom.exit()
do.coffee
:
window.echoAndReturnTitle = (arg) ->
console.log "echoing '#{arg}'"
console.log $(".explanation").text()
return document.title
результат:
> phantomjs inject.coffee
echoing 'hello'
PhantomJS is a headless WebKit with JavaScript API.
It has fast and native support for various web standards:
DOM handling, CSS selector, JSON, Canvas, and SVG.
PhantomJS is created by Ariya Hidayat.
PhantomJS: Headless WebKit with JavaScript API
или если вы предпочитаете JavaScript (они автоматически генерируются и немного уродливы):
`.js':// Generated by CoffeeScript 1.3.1
(function() {
var page;
page = require('webpage').create();
page.onConsoleMessage = function(msg) {
return console.log(msg);
};
page.open("http://www.phantomjs.org", function(status) {
if (status === "success") {
return page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js", function() {
if (page.injectJs("do.js")) {
page.evaluate(function() {
var title;
title = echoAndReturnTitle('hello');
return console.log(title);
});
return phantom.exit();
}
});
}
});
}).call(this);
do.js
:
// Generated by CoffeeScript 1.3.1
(function() {
window.echoAndReturnTitle = function(arg) {
console.log("echoing '" + arg + "'");
console.log($(".explanation").text());
return document.title;
};
}).call(this);