我想添加一个 JavaScript <script></script>
标签,包含或采购不受信任的代码,到网页 PhantomJS 访问,并让页面表现得就像页面最初包含标签一样。
includeJs()
/injectJs()
不要做我需要的——他们将代码注入(inject)我的 PhantomJS 环境,但我需要将我的代码注入(inject)网页。此外,这些函数将我的 PhantomJS 局部变量暴露给不受信任的代码,这是我不希望的。
evaluate()
也不做我需要的,因为它不会接受包含不受信任的 JavaScript 的字符串。相反,它希望我的 PhantomJS 脚本包含我编写的函数。
如何将不受信任的 JavaScript 注入(inject)我使用 PhantomJS 访问的网页?
最佳答案
原来 page.evaluate()
接受传递给 JavaScript 函数的参数。利用这一点,我能够将我想在页面上运行的实际 JavaScript 传递到从 page.evaluate()
运行的函数中,该函数将脚本 block 注入(inject)页面:
page = ...
function inject_js(js_code) {
page.evaluate(function(js_code) {
var js_block = document.createElement('script');
js_block.type = 'text/javascript';
js_block.innerHTML = js_code;
document.getElementsByTagName('body')[0].appendChild(js_block);
}, js_code);
}
关于javascript - PhantomJS:将 Javascript 添加到网页(不是 PhantomJS 环境),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395141/