में जावा ऑब्जेक्ट्स के इंटरसेप्ट फ़ील्ड का उपयोग निष्पादित जावास्क्रिप्ट कोड में जावा ऑब्जेक्ट्स के क्षेत्र (और विधि) तक पहुंच को रोकना संभव है? जेएससीओकोआ में प्रतिनिधि की तरह ही संपत्ति और विधि पहुंच को संभालने की अनुमति मिलती है।राइनो
Q
राइनो
6
A
उत्तर
5
आप जावा ऑब्जेक्ट्स को लपेटने के तरीके को निर्दिष्ट करने के लिए Context.setWrapFactory का उपयोग कर सकते हैं। यहाँ रैपर है कि क्षेत्र का उपयोग और विधि कॉल प्रिंट पता चलता है:
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
import org.mozilla.javascript.NativeJavaMethod;
import org.mozilla.javascript.NativeJavaObject;
import org.mozilla.javascript.Scriptable;
public class InterceptNativeObject extends NativeJavaObject {
@Override
public Object get(String name, Scriptable start) {
Object res = super.get(name, start);
System.out.println("Field get name="+name+" result="+res);
if (res instanceof NativeJavaMethod) {
NativeJavaMethod method = (NativeJavaMethod) res;
return new JavaMethodWrapper(method);
}
return res;
}
public InterceptNativeObject(Scriptable scope, Object javaObject,
Class<?> staticType) {
super(scope, javaObject, staticType);
}
}
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 के विकल्प के रूप में सुझाव दिया गया है कि स्क्रिप्ट योग्य इंटरफेस को कक्षा के तरीकों/क्षेत्रों में कॉल को अवरुद्ध करने के लिए भी संभव है।
संबंधित मुद्दे
- 1. राइनो (मोज़िला के राइनो)
- 2. राइनो
- 3. राइनो
- 4. राइनो
- 5. राइनो कॉमन्स और राइनो मोक्स संदर्भ दस्तावेज़?
- 6. राइनो मोक्स
- 7. राइनो मोक्स
- 8. JSR223 राइनो
- 9. राइनो मोक्स
- 10. राइनो मोक्स
- 11. मोज़िला राइनो
- 12. राइनो मोक्स, VerifyAllExpectations
- 13. राइनो Mocks समस्याओं
- 14. राइनो प्रिंट समारोह
- 15. राइनो मोक्स आंशिक मॉक
- 16. राइनो और डोम समर्थन
- 17. require.js और जावा/राइनो
- 18. मैं कॉलबैक (राइनो)
- 19. राइनो-मॉक स्टब्स
- 20. राइनो में यूनिकोड
- 21. राइनो मोक्स: मॉकिंग HttpRequestBase.Files
- 22. राइनो स्क्रिप्ट इंजन
- 23. जावा से राइनो
- 24. राइनो मॉक सूची बाधा
- 25. राइनो मोक्स और कॉम्पैक्ट फ्रेमवर्क
- 26. राइनो मोक्स - Arg.Matchches का उपयोग
- 27. राइनो मोक्स दोहराना क्या है?
- 28. राइनो-मैक्स - अच्छा नमूना ऐप्स
- 29. राइनो मोक्स एएए त्वरित प्रारंभ?
- 30. राइनो वीएस स्पाइडरमोनकी प्रदर्शन परीक्षण
बहुत बहुत धन्यवाद, यह वही है जो मैं ढूंढ रहा था। मैं उत्सुक हूं, आपको इस विषय पर जानकारी कहां मिली? –