javascript - 我找不到在 HTML 和 Javascript 中声明的变量
问题描述
我正在研究 YouTube 频道的来源。
为方便起见,我简单地重写了该页面的代码。
这是 HTML。
<html>
<head>
<script data-original-src="/miniplayer.js" src="/miniplayer.js"></script>
...
</head>
这是'miniplayer.js'的代码。
(function(g) {
var window = this;
...
})(_yt_player);
我认为“miniplayer.js”是第一个要处理的代码,因为
它位于 head 标签的第一行。
但是我在调用脚本时立即执行
的“miniplayer.js”函数中找不到变量“_yt_player” 。
解决方案
要查找定义全局对象的位置,如果对象具有函数,通常可以console.dir
在函数上使用并检查其[[FunctionLocation]]
属性。这就是我找到yt_player
定义的方式:
这就是简单的方法。如果这不起作用,另一种识别窗口属性创建位置的方法是使用在页面加载开始时运行的用户脚本,并为该属性分配一个设置器。调用 setter 时,抛出错误并检查堆栈跟踪。
// ==UserScript==
// @name Find _yt_player
// @match https://www.youtube.com/
// @run-at document-start
// @grant none
// ==/UserScript==
Object.defineProperty(window, '_yt_player', {
set(newVal) {
throw new Error('_yt_player was just assigned to');
}
});
以上两种方法都会带你到base.js
.
推荐阅读
- git - 如果我们可以修改一个 git commit 的作者,是否与拥有两个 git 配置文件完全一样?
- javascript - 作为开发拉取请求确认的一部分的全自动化通行证
- javascript - 合并 rxjs 流,检测变化并返回一个值
- rust - 如何解决 Rust 中的这个返回类型函数错误
- c# - 为什么我的 AI 模型可以训练但没有进化 - ML Agents
- jquery - 在jqgrid MVC中将json转换为日期fromat
- amazon-web-services - 使用 AWS 设置新应用程序
- c# - 当客户端断开连接而不取消连接时,Websocket.ReceiveAsync 导致崩溃
- javascript - 无法读取未定义的属性“textContent”。控制台显示错误,但代码仍然有效?
- c - 在C中通过qsort进行双重比较