Firefox有Sandbox和evalInSandbox()。 Chrome在其内容脚本中具有沙盒执行(它们称之为独立执行)。我在IE浏览器扩展中寻找相同的东西。
我可以加载一个javascript文件,然后调用evalScript(),但代码在与页面上存在的javascript相同的环境中执行。我需要一种在沙盒/隔离环境中运行我的库(包括并基于jQuery)的方法,但仍然允许它修改DOM,就好像它在页面上运行一样。
Jint看起来很有前途,但目前无法评估jQuery。 (他们可以解析它。)
我该怎么做?
答案 0 :(得分:6)
看起来你正处于这个腌菜中。
我真的希望我有更好的消息,但看起来可能需要一个小小的奇迹来完成你正在寻找的东西......或者可能是很多钱。 :)
你最好的选择可能是找到少数几个声称自己能够做到这一点的人之一并付出很多钱来分享这个秘密,或者重新考虑为什么你真的想要你想要的东西,看看你能不能以另一种方式实现它。
答案 1 :(得分:2)
您可能会发现在Live Labs上查看Microsoft Web Sandbox是值得的: http://websandbox.livelabs.com/
虽然它更完全成熟并且与mashup等相关,但它可能会指向正确的方向。
答案 2 :(得分:2)
您正在寻找的是ActiveScript引擎(http://en.wikipedia.org/wiki/Active_Scripting)
我现在找不到任何有用的链接,MSDN只包含接口定义(http://msdn.microsoft.com/en-us/library/ccd0zt2w(v=vs.85).aspx) 尝试使用Google“Active Scripting”(而不是“Action scripting”!)
您需要在扩展中实现接口IActiveScriptHost,创建一个«JScript»对象,调用SetSite并传递您的主机对象,然后您可以将您的js代码加载到此引擎并运行它。
由于缺乏关于它的文档,这种技术非常困难。 如果你仍然对此感兴趣,我可以用C ++ / ATL向你发送一些例子。
答案 3 :(得分:1)
你能详细说明一下你的目标吗?
我认为你没有明确定义你想要完成的事情。如果您的代码能够修改页面的DOM,那么它有效 在页面上下文中执行。它可以创建新的脚本块来执行在同一个执行环境中运行时可以完成的任何不安全或不可靠的操作。
IE提供的功能无法满足您的要求,而且我不相信Firefox和Chrome功能会按您期望的方式运行。