监视站点在不同浏览器中如何与内部javascript交互

监视站点在不同浏览器中如何与内部javascript交互,javascript,jquery,phantomjs,Javascript,Jquery,Phantomjs,我将编写一个javascript库作为浏览器: 在所有浏览器中(例如Safari、Firefox、Chrome、IE等等,在桌面和移动环境中),都包含一些标准javascript对象:窗口、导航器、屏幕、历史记录、位置、文档、事件等等。。。具有许多不同浏览器的属性(或属性)和方法。我的工作是: 创建一个javascript文件,在特定的浏览器(比如Safari)中运行,并将其命名为“libgen.js”。该脚本收集浏览器中的所有javascript对象(不包括HTML标记,甚至HTML5标记)以

我将编写一个javascript库作为浏览器:

在所有浏览器中(例如Safari、Firefox、Chrome、IE等等,在桌面和移动环境中),都包含一些标准javascript对象:窗口、导航器、屏幕、历史记录、位置、文档、事件等等。。。具有许多不同浏览器的属性(或属性)和方法。我的工作是:

创建一个javascript文件,在特定的浏览器(比如Safari)中运行,并将其命名为“libgen.js”。该脚本收集浏览器中的所有javascript对象(不包括HTML标记,甚至HTML5标记)以及所有属性(或属性)和方法,然后生成一个可以在phantomjs环境中运行的javascript,名为新脚本:“libsim.js”

在“libsim.js”中,它将模拟之前收集的所有javascript对象的所有属性(或属性)和方法,然后在phantomjs中运行“libsim.js”时,它将加载一个特定的页面(输入参数),调用该页面为“测试页面”,等待一个特定的超时(输入参数),然后停止脚本

例如:在Safari中,存在一个对象名:“Obj”,其属性和方法如下: 特性: P1 P2 方法: M1() M2()

“libgen.js”将在Safari中运行(将“libgen.js”放入html页面,然后通过Safari打开此页面),然后收集对象“Obj”,然后生成新脚本“libsim.js”(输出到控制台或文本区域,然后通常保存到文件“libsim.js”) 运行时:phantomjs libsim.js 如果“testpage.html”调用Obj.M1(),“libsim.js”将捕获该信息,则注销到包含以下信息的文件: 属性或方法的名称 时间戳 然后返回原始值 例如,您可以在以下位置查看详细信息: 在最初的示例中,它将注销到控制台,在此作业中,它将注销到一个名为“trace.txt”的文件

我想监控一个站点如何与不同浏览器中的内部javascript交互

我的问题是:你认为这份工作有可能吗?你还有什么其他的解决方案可以给我建议吗?非常感谢

[生成的脚本]“libsim.js”[…]将模拟之前收集的所有javascript对象的所有[…]方法

你认为这份工作可能吗

不,绝对不是。您尝试模拟的那些方法是内部的:

  • 你不知道他们做什么(正如你所说,所有跨浏览器的怪癖,加上你不想用js实现你自己的浏览器)
  • 您不知道它们的代码(它们被称为本机代码是有原因的:它们甚至可能根本不是用JS编写的)
  • 您不能简单地测试所有可能的输入,甚至不能确定它们的输出,这可能是一些内部状态

您无法“返回原始值”。

它可以模拟某些内容,但也会丢失很多内容。闭包和模块、xbrowser方法怪癖、在每个浏览器上使用相同主机的限制等等。您必须实现javascript可用的所有对象的所有行为/方法/属性,并以某种方式复制每个浏览器中不同的行为部分。这对我来说一点也不实际。如果你告诉我们你要解决的真正问题,我们可能会提供其他更实用的想法,来解决这个问题,这可能会对你更有用。事实上,有人将webkit移植到纯javascript:@ArtjomB.:是的,我猜有人会使用emscripten将浏览器引擎移植到js不过,这也有其自身的问题和特点,更像是“又一个浏览器”,而不是Safari的精确复制(或者任何一个OP想要模拟的)。