【问题标题】:Monitor how a site will interact with internal javascript in different browsers监控网站如何与不同浏览器中的内部 javascript 交互
【发布时间】:2014-09-10 03:36:15
【问题描述】:

我打算写一个javascript库作为浏览器:

在所有浏览器中(例如 Safari、Firefox、Chrome、IE ……在桌面和移动环境中),包括一些标准的 javascript 对象:Window、Navigator、Screen、History、Location、Document、Events……具有许多属性(或属性)和浏览器之间不同的方法。我的工作是:

创建 1 个 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”会捕捉到它,然后注销到包含以下信息的文件: 属性或方法的名称 时间戳 然后它返回原始值 有关详细示例,您可以查看:https://github.com/ariya/phantomjs/blob/master/examples/detectsniff.js 在原始示例中,它注销到控制台,在此作业中,它将注销到一个文件,名为:“trace.txt”

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

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

【问题讨论】:

  • 它可以模拟一些东西,但也会错过很多东西。闭包和模块,xbrowser 方法怪癖,在每个上使用相同主机的限制等。
  • 您必须实现所有可用于 javascript 的对象的所有行为/方法/属性,并以某种方式复制每个浏览器中不同的行为部分。这对我来说根本不实用。如果您告诉我们您要解决的真正问题是什么,我们可能会提供其他更实用的想法来解决这个问题。

标签: javascript jquery phantomjs


【解决方案1】:

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

你认为这份工作可行吗?

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

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

你只是不能“返回原始值”。

【讨论】:

  • 其实有人将webkit移植到纯javascript:github.com/trevorlinton/webkit.js
  • @ArtjomB.:是的,我猜有人会使用 emscripten 将浏览器引擎移植到 js(就像 js 引擎一样)。但是,这有其自身的问题和特性,更像是“又一个浏览器”,而不是 Safari 的精确复制(或任何一个 OP 想要模拟的)。
猜你喜欢
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 2012-06-06
  • 2014-02-08
相关资源
最近更新 更多