无法访问从PhantomJS运行的iframe内容

时间:2016-12-18 17:37:25

标签: javascript node.js iframe phantomjs

我有一个NodeJS服务器(express),它服务于包含iframe的常规应用程序。索引页面加载的文件中的JS代码在iframe上运行(获取数据和注入标记)。该应用程序可以在常规浏览器(Chrome,Firefox,...)中正常运行。现在我需要运行这个无头,所以,我设计了以下计划:

  • 通过PhantomJS
  • 运行页面
  • 通过Gulp任务触发PhantomJS中的一系列操作

Gulp任务看起来像这样:

gulp.task('run-headless-pipeline', function() {
  console.log('Running Headless Pipeline');

  var phantomInstance;
  var page;

  phantom.create()
    .then(function (instance) {
      phantomInstance = instance;
      return phantomInstance.createPage();
    })
    .then(function (p) {
      page = p;
      page.setting('webSecurityEnabled', 'no');
      return page.open('http://localhost:3000');
    })
    .then(function (status) {
      var result;
      if(status === 'success') {
        console.log('## Status', status);

        result = page.invokeMethod('evaluate', function () {
          function0();
          function1();
          return getResults();
        });
      }
      return result;
    })
    .then(function(result) {
      console.log(result);
    })
    .then(function() { phantomInstance.exit(); })
    .catch(function (e) { console.log(e); phantomInstance.exit(); });
});

其中function0()function1()getResults()是在localhost:3000的索引页面中加载的JS文件中定义的方法。 function0工作正常,但function1会抛出异常,唯一特别之处在于它尝试访问iframe中的内容。问题发生在以下几行:

var frame = document.getElementById('targetFrame');
var targetDocument = frame.contentWindow.document;

在Chrome中,此工作正常,targetDocument变量包含iframe中的文档,在PhantomJS中,targetDocumentundefined

在我的搜索过程中,许多人建议运行PhantomJS,参数--web-security设置为false(或'no')。这不适合我。有什么想法吗?

我的设置如下:

  • NodeJS v4.2.6
  • Phantom模块v2.1.21(包含phantomjs-prebuilt v2.1.4)

0 个答案:

没有答案