chromium中脚本执行的代码路径

本文详细介绍了WebKit中HTML文档解析器如何执行脚本的过程,包括从解析器启动脚本执行到具体执行脚本的各个步骤。此外还深入探讨了影子对象与DOMWindow实例的绑定机制,解释了为何采用影子对象来实现对DOMWindow实例属性的隐藏。

webkit中脚本执行代码路径:

void HTMLDocumentParser::pumpTokenizer(SynchronousMode mode)
{。。。
bool HTMLDocumentParser::runScriptsForPausedTreeBuilder()
{。。。    
bool HTMLScriptRunner::execute(PassRefPtr<Element> scriptElement, const TextPosition1& scriptStartPosition)
{。。。          
void HTMLScriptRunner::runScript(Element* script, const TextPosition1& scriptStartPosition)
{。。。               
void ScriptElement::executeScript(const ScriptSourceCode& sourceCode)
{。。。                    
ScriptValue ScriptController::executeScript(const ScriptSourceCode& sourceCode, ShouldAllowXSS shouldAllowXSS)
{。。。                           
ScriptValue ScriptController::evaluate(const ScriptSourceCode& sourceCode, ShouldAllowXSS shouldAllowXSS)
{。。。

影子对象和DOMWindow实例

initContextIfNeeded这个函数非常关键,它调用了installDOMWindow完成了window对象和dom对象绑定到V8中。

函数上面的注释也不容忽略:



JavaScript中的全局对象和DOMWindow实例相对应。但为了隐藏DOMWindow中的某些属性,chromium用了一种影子对象作为javascript中的全局对象,

并且使用DOMWindow实例作为这个影子对象的原型。在Javascript空间中是无法察觉DOMWindow实例的,因为__proto__ 的访问器会直接跳过它。



影子对象和DOMWindow实例在javascript环境中被看做是同一个对象。对应于DOMWindow实例的javascript对象其实是影子对象。当映射DOMWindow实例

为V8对象时,返回的是影子对象。






### 如何在 Windows 注册表中配置或修改 Chromium 的相关设置 在 Windows 中,Chromium 和其他基于 Chromium 的浏览器通常会存储其设置和数据到特定的注册表路径以及用户目录中的文件夹。以下是关于如何通过注册表来管理和调整 Chromium 设置的信息。 #### 1. **了解 Chromium 存储位置** Chromium 默认会在用户的 AppData 文件夹中保存大部分个性化设置和缓存数据。具体路径如下: - 用户级数据:`C:\Users\<用户名>\AppData\Local\Chromium\User Data` - 如果需要更改默认的数据存储路径,可以通过命令行参数 `--user-data-dir=<新路径>` 来指定新的用户数据目录[^4]。 #### 2. **访问 Chromium 的注册表键值** Chromium 并不直接依赖于传统的 Windows 注册表项来进行核心功能管理,而是更多地依靠本地 JSON 配置文件(如 `Preferences`)。然而,在某些情况下,仍然可以利用注册表实现一些高级操作: - **启动选项** 若要为所有用户强制应用某个启动参数,可以在注册表中定义一个字符串值 (REG_SZ),指向 Chromium执行文件并附加所需的命令行标志。例如: ```plaintext HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ ``` 虽然上述路径适用于 Google Chrome,但对于自定义构建的 Chromium 版本,可能需要手动创建类似的策略路径,并将其命名为 `Chromium` 或者实际使用的名称。 - **沙盒权限控制** 当安装 Chromium 时如果存在同目录下的 `chrome-sandbox.exe` 程序,则无需额外设定环境变量;但如果缺少该程序或者希望调试沙盒行为,可通过以下方式启用开发者模式沙盒支持: - 创建系统范围内的环境变量 `CHROME_DEVEL_SANDBOX`,并将它的值设为完整的沙盒可执行文件路径[^1]。 #### 3. **示例:添加扩展插件白名单** 假设要允许加载未托管于官方商店的第三方扩展程序,可以编辑注册表以激活开发人员模式的功能开关: ```plaintext [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Chromium\ExtensionInstallForcelist] "1"="abcdefgihjklmnopqrstuvwxyz==;https://example.com" ``` 在此例子中,“abcdefgihjklmnopqrstuvwxyz==”代表目标 CRX 扩展包的身份标识符(CRXLID)。 #### 4. **注意事项** 由于 Chromium 不像传统软件那样频繁读取注册表信息,因此许多定制化需求更推荐通过 GPO 组策略模板或是直接修改源代码重新编译的方式来达成。比如按照指引克隆项目仓库后运行脚本来获取最新版本号[^2],接着依据文档说明调整 build 下的各种 gyp 定义文件[^3]。 --- ### 提供一段 Python 小工具用于查询当前已安装 Chromium 浏览器的位置 下面是一个简单的 python 脚本用来探测是否存在标准安装路径上的 chromium 实例。 ```python import os, sys def find_chrome(): paths = [ r"C:\Program Files\Chromium\Application", r"C:\Program Files (x86)\Chromium\Application", r"%LOCALAPPDATA%\Chromium\Application" ] for path in paths: expanded_path = os.path.expandvars(path) exe_file = os.path.join(expanded_path, 'chrome.exe') if os.path.isfile(exe_file): return exe_file raise FileNotFoundError('No instance of Chromium found.') if __name__ == '__main__': try: print(find_chrome()) except Exception as e: print(e) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值