Внедрение JavaScript в Zombie.js
Привет, мне было интересно, есть ли в узле js и zombie js возможность вставлять файлы javascript в безголовый браузер, аналогично тому, что вы можете делать с phantomjs.
Например, в фантомном JS вы должны сделать:
page.injectJs("amino/TVI.js")
Я использовал phantomjs, и он делает то, что я хочу, но, тем не менее, я тестирую другие варианты из-за большого объема памяти, требуемого при использовании phantom js.
2 ответа
Вы можете добавить тег script в объект документа, так как он поддерживает DOM API в зомби.
В следующем примере показано, как вставить jquery на домашнюю страницу зомби:
var Browser = require("zombie");
var assert = require("assert");
// Load the page from localhost
browser = new Browser()
browser.visit("http://zombie.labnotes.org/", function () {
assert.ok(browser.success);
// append script tag
var injectedScript = browser.document.createElement("script");
injectedScript.setAttribute("type","text/javascript");
injectedScript.setAttribute("src", "http://code.jquery.com/jquery-1.11.0.min.js");
browser.body.appendChild(injectedScript);
browser.wait(function(window) {
// make sure the new script tag is inserted
return window.document.querySelectorAll("script").length == 4;
}, function() {
// jquery is ready
assert.equal(browser.evaluate("$.fn.jquery"), "1.11.0");
console.log(browser.evaluate("$('title').text()"));
});
});
Попробуй думать иначе. У вас уже есть все под рукой в зомби, чтобы ввести все, что вы хотите.
Например: that.browser.window
указывает на окно jsdom, которое каждая часть вашего сайта javascript использует в качестве основы. Таким образом, вы можете получить доступ к DOM и всем другим объектам окна на странице уже загружены.
Я не знаю, что вы хотите архивировать с помощью инъекций - вы не должны использовать его для тестирования, но похоже, что это не ваша настоящая цель