実行されたJavaScriptコードでJavaオブジェクトのフィールド(およびメソッド)へのアクセスを傍受することはできますか? JSCocoaの代理人と同じように、プロパティとメソッドのアクセスを処理できます。RhinoのJavaオブジェクトのフィールドアクセスを傍受する
6
A
答えて
5
Context.setWrapFactoryを使用して、Javaオブジェクトをラップする方法を指定できます。
InterceptWrapFactory.java
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.WrapFactory;
public class InterceptWrapFactory extends WrapFactory{
@Override
public Scriptable wrapAsJavaObject(Context cx, Scriptable scope,
Object javaObject, Class<?> staticType) {
return new InterceptNativeObject(scope, javaObject, staticType);
}
}
InterceptNativeObject.java
JavaMethodWrapper.java
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.NativeJavaMethod;
import org.mozilla.javascript.Scriptable;
public class JavaMethodWrapper implements Function {
NativeJavaMethod method;
public JavaMethodWrapper(NativeJavaMethod method) {
this.method = method;
}
public boolean hasInstance(Scriptable instance) {
return method.hasInstance(instance);
}
public Object call(Context cx, Scriptable scope, Scriptable thisObj,
Object[] args) {
System.out.println("Call method: "+method);
return method.call(cx, scope, thisObj, args);
}
public boolean has(int index, Scriptable start) {
return method.has(index, start);
}
public Scriptable construct(Context cx, Scriptable scope, Object[] args) {
return method.construct(cx, scope, args);
}
public void put(int index, Scriptable start, Object value) {
method.put(index, start, value);
}
public void delete(int index) {
method.delete(index);
}
public Scriptable createObject(Context cx, Scriptable scope) {
return method.createObject(cx, scope);
}
public boolean has(String name, Scriptable start) {
return method.has(name, start);
}
public void defineConst(String name, Scriptable start) {
method.defineConst(name, start);
}
public void put(String name, Scriptable start, Object value) {
method.put(name, start, value);
}
public void delete(String name) {
method.delete(name);
}
public Scriptable getPrototype() {
return method.getPrototype();
}
public void setPrototype(Scriptable m) {
method.setPrototype(m);
}
public Scriptable getParentScope() {
return method.getParentScope();
}
public void setParentScope(Scriptable m) {
method.setParentScope(m);
}
public Object[] getIds() {
return method.getIds();
}
public Object get(int index, Scriptable start) {
return method.get(index, start);
}
public Object get(String name, Scriptable start) {
return method.get(name, start);
}
public String getClassName() {
return method.getClassName();
}
public Object getDefaultValue(Class<?> typeHint) {
return method.getDefaultValue(typeHint);
}
}
そして、これは次のとおりです。ここで は、フィールドアクセスとメソッド呼び出しを出力するラッパーを示しテストコード:
import java.util.Vector;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
public class InterceptTest {
public static void main(String[] args) {
Context cx=Context.enter();
cx.setWrapFactory(new InterceptWrapFactory());
Scriptable root=cx.initStandardObjects();
ScriptableObject.putProperty(root,"v", new Vector<String>());
cx.evaluateString(root, "v.add('foo'); v.get(0)", "src", 1, null);
}
}
0
hog1e3の代わりに、Scriptableインターフェイスを実装してクラスのメソッド/フィールドへの呼び出しを傍受することもできます。
関連する問題
- 1. Javaで代入を傍受する
- 2. GRPCクライアント例外を傍受するJava
- 3. RhinoのJavaオブジェクトへの呼び出しを傍受する機能のようなセキュリティマネージャを実装することは可能ですか?
- 4. Mozilla RhinoのJavaオブジェクトへのキャスト
- 5. ウィンドウを傍受するウィンドウを傍受する
- 6. WebViewの傍受
- 7. 実行中のJavaプログラムの出力を傍受する
- 8. 傍受
- 9. Javaインターフェイスメソッドの呼び出しを傍受する
- 10. Weblogicデプロイメントの傍受
- 11. HTMLインポートを傍受する
- 12. 注射を傍受する
- 13. XHRを傍受する
- 14. フラッシュメッセージを傍受する
- 15. Sitefinity、ページングイベントを傍受する
- 16. バーコードスキャンイベントを傍受する
- 17. Javaスプリングセキュリティ - 別のログイン用のサブドメインURLを傍受しますか?
- 18. 他のアプリケーションのモーダルダイアログポップアップを傍受する
- 19. 受信メッセージの場所/受信メッセージを傍受する
- 20. JUnitのアサート機能を傍受する
- 21. ウェブブラウザのコンソールメッセージを傍受する
- 22. ストアキットのアラートビューを傍受する
- 23. アンドロイドのスクリーン更新を傍受する
- 24. ギャラリーの共有クリックを傍受する
- 25. DNSサーバのデータを傍受する
- 26. コンボボックスのドロップダウンを傍受する
- 27. UIPickerViewユーザーの選択を傍受する
- 28. nlogのログメッセージを傍受する
- 29. ウィンドウのマウスクリックを傍受する
- 30. MVCコントローラのアクションメソッドを傍受する
ありがとう、これは私が探していたものです。私は興味があります、あなたはトピックに関する情報をどこで見つけましたか? –