我需要以某种方式深度克隆我的ScriptEngine对象的整个绑定集.
到目前为止,我已经尝试过Cloner库来克隆整个Bindings结构.如果它有用,那将是很好的,因为它可以确保精确的副本,包括私有变量.但这会导致jvm堆损坏(jvm只是崩溃,退出代码为-1073740940).有时它不会崩溃,但会发生奇怪的事情,比如System.out.println()停止工作应该......
我还研究了使用ScriptEngine中的js代码克隆对象,这样我就可以将它们作为NativeObjects获取并在一些java地图中管理它们.但是我发现的所有克隆方法都存在缺陷.我想要一个精确的对象快照.例如,如果每两个对象A和B的包含字段(比如a.fa和b.fb),其引用相同的对象C,使用克隆时jQuery.extend()(例如)的字段a.fa和b.fb克隆的a和b的将引用的不同的克隆c,而不是引用一个相同的克隆.还有许多其他边缘问题.
我还尝试使用Cloner克隆整个ScriptEngine(不仅仅是绑定),我还尝试使用Rhino的js引擎并克隆整个范围(而不是Bundeled ScriptEngine包装器).但堆腐败问题仍然存在.
我需要这个,因为我必须能够将整个ScriptEngine绑定的值恢复到之前的某个点.我需要制作绑定的精确快照.
该应用程序是我的博士研究项目的一部分,该项目包括运行状态机和节点(在java中实现),其中附带了js代码.js代码由最终用户输入,并且在运行时被逐出.当无法通过路径到达最终状态时,算法会向后退步,尝试查找备用路径.在每个步骤向后,它必须撤消js引擎绑定中可能发生的任何更改.
所有全局变量名称在js evaling之前都是已知的,并且是对象(用户在节点的代码中键入,然后将其组织(在java中)到具有某些名称模式的js对象中).但是他们的内容可以是任何东西,因为它是由用户js代码控制的.
所以我想我现在唯一的解决方法是使用js代码克隆js对象.
我在Xcode中创建了一个新的Mac OSX应用程序,通过Interface Builder包含了一个WebView,现在我正在尝试以编程方式告诉它要加载哪个URL.这是我有多远:
然后从那里我已经包含了我认为访问WebView所需的内容,包括:
#import <WebKit/WebKit.h>
@synthesize webView;
// etc, I think this is all good
Run Code Online (Sandbox Code Playgroud)
我倒下的地方是访问WebView本身并告诉它要加载什么URL.我尝试着:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSString *urlAddress = @"http://www.example.com/";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[[webView mainFrame] loadRequest:requestObj];
}
Run Code Online (Sandbox Code Playgroud)
但我想我应该首先在Interface Builder中连接一些东西?
我的最终目标是创建一个Mac OSX应用程序,它基本上只是一个基于视图的应用程序(使用iPhone SDK很容易).从那里我想包含一个本地htdocs文件夹与我自己的本地.html文件,但第一步是告诉WebView加载什么URL :)
谢谢!