Javascript PhantomJS:在遍历脚本标记时如何检查null?
我使用子进程和execFile()函数从节点运行PhantomJS脚本。 我正在将url作为参数从节点服务器传递到脚本。 有时url会导致404,并且在页面中找不到脚本标记。这导致PhantomJS脚本崩溃,最终导致我的应用程序崩溃。 在以下代码中调用Javascript PhantomJS:在遍历脚本标记时如何检查null?,javascript,node.js,phantomjs,Javascript,Node.js,Phantomjs,我使用子进程和execFile()函数从节点运行PhantomJS脚本。 我正在将url作为参数从节点服务器传递到脚本。 有时url会导致404,并且在页面中找不到脚本标记。这导致PhantomJS脚本崩溃,最终导致我的应用程序崩溃。 在以下代码中调用document.getElementsByTagName('script')[I].innerHTML时,如何处理空值 "use strict"; var page = require('webpage').create(); var syst
document.getElementsByTagName('script')[I].innerHTML
时,如何处理空值
"use strict";
var page = require('webpage').create();
var system = require('system');
var args = system.args;
page.open(args[1], function () {
var scriptCtnt = page.evaluate(function() {
for (var i = 0; i < 20; i++) {
var scriptStr = [].map.call(document.getElementsByTagName('script')[i].innerHTML, function(data) {
return data;
}).join('');
if (scriptStr.indexOf('some.field') !== -1) {
return scriptStr;
}
}
});
var str = scriptCtnt;
str = str.replace('//<![CDATA[','{');
str = str.replace(/}},/g,'}}');
var jsonStr = JSON.stringify(JSON.parse(str));
console.log(jsonStr);
phantom.exit();
});
编辑:
这是我尝试过的方法之一,else返回一个空字符串,但这只是为了测试
var scriptCtnt = page.evaluate(function() {
for (var i = 0; i < 20; i++) {
var elem = document.getElementsByTagName('script')[i].innerHTML;
if (typeof elem != 'undefined') {
var scriptStr = [].map.call(elem, function(data) {
return data;
}).join('');
if (scriptStr.indexOf('some.field') !== -1) {
return scriptStr;
}
} else {
return '';
}
}
});
var scriptCtnt=page.evaluate(函数(){
对于(变量i=0;i<20;i++){
var elem=document.getElementsByTagName('script')[i].innerHTML;
if(元素类型!=“未定义”){
var scriptStr=[].map.call(元素,函数(数据){
返回数据;
}).加入(“”);
if(scriptStr.indexOf('some.field')!=-1){
返回scriptStr;
}
}否则{
返回“”;
}
}
});
N.B:我试图创建一个变量并检查未定义的值,但没有成功。
:你能告诉我们你尝试了什么吗?@JeffHuijsmans谢谢,更新了我的答案。
var scriptCtnt = page.evaluate(function() {
for (var i = 0; i < 20; i++) {
var elem = document.getElementsByTagName('script')[i].innerHTML;
if (typeof elem != 'undefined') {
var scriptStr = [].map.call(elem, function(data) {
return data;
}).join('');
if (scriptStr.indexOf('some.field') !== -1) {
return scriptStr;
}
} else {
return '';
}
}
});