phantomjs作用域的问题

Devqin 发布于 2013/04/25 17:13
阅读 743
收藏 1

rt.在主文件引入模块a,可是在page.evaluate()方法中不能引入??

var page = require('webpage').create();
var a = require("./a");
var url="https://github.com/";

page.open(url, function(status) {
	page.includeJs("http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js",function(){
		page.evaluate(function() {//page.evaluate之外的变量不能在这里引用吗?如果我想在这里引用外部定义的变量呢,求解
		var tc =document.body.innerText;
		var href=window.location.href;
		var as = document.getElementsByTagName("a");
		var suba=a.finda(href,as);//在这里引用这个方法
		
			$.ajax({
				type: "POST",
				url:"http://127.0.0.1:1337/ajax",
				dataType:"text",
				data:{"url":href,"data":tc,"suba":suba}
			});
	    });
	});
});
//上面文件中引入的模块a代码
function finda(url,as){
		var ha=new Array();
		var len = as.size();
		for(var i=0;i<len;i++){
		var cura=as.eq(i).attr("href");
		if(cura.indexOf("http")=="-1"){
			ha.push(url+cura);
		}else{
		ha.push(cura);
		}
		}
	return ha;
}


exports.finda = finda;

以下是问题补充:

@Devqin:关于这个方法的官方文档说明在这里:https://github.com/ariya/phantomjs/wiki/API-Reference-WebPage#evaluatefunction-arg1-arg2--object (2013/04/25 17:23)
加载中
0
抱雪
抱雪

你引用的文档下面就说明了用法,要把参数传递到evaluate里面去,需要做的是

  1. evaluate里面函数需要定义一个参数
  2. 调用evaluate时传递要调用的对象

obj = [1,2,3,4]
page.evaluate(function (arg) {
   // 外面的变量obj被传递进来了,用 arg 这个名字使用
   // do someshing
}, obj);



返回顶部
顶部