私は、Web サイトの完全な DOM へのアクセスとクロスドメインでサイトを開く機能の両方を本質的に必要とするサーバー側の JavaScript のビットとピースをいくつか実行していますが、少なくともこれまでのところ、PhantomJS はその仕事に最適なツールのようです。
ただし、 Object.watch() メソッドがありません。これはむしろ必要です。そのため、Stackoverflow の別の場所 ( https://gist.github.com/384583で入手可能) に回答として投稿されたシムを使用して、そのようなメソッドにアクセスできるようにしようとしています。
機能していません。
それはまた、私の JavaScript の理解レベルをはるかに超えているため、それが何をしているのか、なぜ機能していないのかを正確に理解するのを誰かが助けてくれるのではないかと思っています。
助けてくれてありがとう、
トビー
(以下に引用したコード:
// Cross-browser object.watch and object.unwatch
// object.watch
if (!Object.prototype.watch) {
Object.prototype.watch = function (prop, handler) {
var oldval = this[prop], newval = oldval,
getter = function () {
return newval;
},
setter = function (val) {
oldval = newval;
return newval = handler.call(this, prop, oldval, val);
};
if (delete this[prop]) { // can't watch constants
if (Object.defineProperty) { // ECMAScript 5
Object.defineProperty(this, prop, {
get: getter,
set: setter,
enumerable: true,
configurable: true
});
} else if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__) { // legacy
Object.prototype.__defineGetter__.call(this, prop, getter);
Object.prototype.__defineSetter__.call(this, prop, setter);
}
}
};
}
// object.unwatch
if (!Object.prototype.unwatch) {
Object.prototype.unwatch = function (prop) {
var val = this[prop];
delete this[prop]; // remove accessors
this[prop] = val;
};
}
そして私のテストコード:
tO = {
"v":0,
"vplus":function(){this.v ++}
};
tO.watch("v", function(prop, oldval, newval) {
console.log("The property "+prop+" is now "+tO.v+". Newval is "+newval+" and oldval "+oldval+".");
if (newval == 5){phantom.exit()};
});
tO.v = 1;
var i = 0
for(i=0; i<10; i++) {
tO.v = i;
console.log(tO.v);
if(tO.v == 9){
console.log("got to 9");
};
};