【问题标题】:Is PhantomJS supposed to load local js for a local html filePhantomJS 是否应该为本地 html 文件加载本地 js
【发布时间】:2016-02-26 04:55:27
【问题描述】:

我是用phantomjs来加载本地的html,也就是加载本地的js文件,所以路径是这样的:

/Users/me/html/page.html
/Users/me/html/page.js

并且 page.html 包含 page.js 文件,我可以通过加载 file:///Users/me/html/page.html 并在该页面的控制台中查看 console.loging 来验证这一点。

现在这个js文件也只是在body中添加了一个属性来测试这个问题,可以正常工作。当我使用 PhantomJS 加载此 html 文件时,js 文件不会更改 DOM(即不会将属性添加到 body)。

js文件最后加载在html文件上,所以在页面底部:

<html>
  <head></head>
  <body>
    <script src="page.js"></script>
  </body>
</html>

再次正常加载此页面可以正常工作,但使用 phantom.js 脚本则无法正常工作:

var page = require("webpage").create();
var system = require("system");
var args = system.args;
var pageURL = args[1];

page.open(pageURL, function(status) {
  if (status !== 'success')
  {
    console.log(status);
  }
  else
  {
    var result = page.evaluate(function()
    {
      return document.body.getAttribute("data-changed") || "not found";
    });
    console.log(result);
  }
});

page.js 看起来像这样:

document.body.setAttribute("data-changed", "true");
console.log("changed the page with js!")

那么,PhantomJS 是否应该从正在打开的页面运行 js?或不?如果是,那么我在这里做错了什么?

【问题讨论】:

  • 做了一个快速测试,它确实适用于 PhantomJS v2.0.1dev,记录 true。你的输出/行为是什么?
  • 您的HTML is invalid。根目录下不能有脚本元素。将其放入身体或头部。
  • 你的rep比我多,你也可以按编辑键。
  • @Vaviloff 我也遇到了同样奇怪的事情。它记录为真,但我不断收到“找不到变量:$”
  • @Carine,请发个问题,好像你有不同的html页面

标签: javascript phantomjs


【解决方案1】:

PhantomJS 页面不直接感知文件系统,并且page.js 脚本实际上对您的页面是不可见的,即使它们位于同一目录中。您可以使用 Phantom 的 injectJs 在页面创建后并在评估之前动态注入脚本,而不是将脚本直接包含在 HTML 中。 injectJs 将接受脚本的绝对本地路径、Phantom 脚本本身的路径相对或远程脚本,但不是相对于页面的路径。

像这样修改你的page.open回调:

page.open(pageURL, function(status) {
    ...
    else {
        // try to inject page.js
        if ( page.injectJs('/Users/me/html/page.js') ) {
            // page.js was injected, so evaluate:
            var result = page.evaluate(function() {
                return document.body.getAttribute("data-changed") || "not found";
            });
            console.log(result);
        }
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 2012-06-21
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 1970-01-01
    相关资源
    最近更新 更多