Javascript 如何在开发者控制台中使用Chrome注入jQuery? 问题
我曾经能够(本地)使用以下两个Chrome扩展中的任意一个,轻松地将jQuery注入到没有jQuery的页面中,并且我没有(客户端)来试验设计更改、开发修改和实时故障排除:Javascript 如何在开发者控制台中使用Chrome注入jQuery? 问题,javascript,jquery,dependency-injection,google-chrome-devtools,Javascript,Jquery,Dependency Injection,Google Chrome Devtools,我曾经能够(本地)使用以下两个Chrome扩展中的任意一个,轻松地将jQuery注入到没有jQuery的页面中,并且我没有(客户端)来试验设计更改、开发修改和实时故障排除: 不幸的是,现在由于防止“XSS”(跨站点脚本)的最新热潮,这些插件不再工作。这些变化背后可能有一个崇高的目的,我只是想了解是什么改变了。我认为这与“内容安全策略”有关,我只是最近才听说过,对它知之甚少 我在2011年第一次了解到XSS是一个浏览器问题,然而,XSS预防措施从未阻止过我进行本地开发。我一直在寻找一种现代
您可以创建一个非常基本的chrome扩展,它只在每个页面上注入JQuery。您可以使用这段代码在清单本身中指定
"content_scripts": [
{
"matches": ["*"],
"js": ["jquery.min.js"] }
]
请注意,*in匹配项将在每个网页上注入脚本。你也可以给出不同的图案。例如,“www.abc.com/*”将匹配以“www.abc.com”开头的所有URL,并将仅在此类页面上注入脚本
更好的解决方案
{
"name": "My Extension",
"version": "0.1",
"manifest_version": 2,
"description": "inject script",
"browser_action": {
"default_icon": "logo.png"
},
"permissions": [
"activeTab"
],
"background": {
"scripts": ["background.js"]
}
}
更好的方法是创建一个chrome扩展,当您单击扩展图标时,它可以将您的JavaScript文件插入当前选项卡
制作一个背景脚本并在清单中指定它
manifest.json
{
"name": "My Extension",
"version": "0.1",
"manifest_version": 2,
"description": "inject script",
"browser_action": {
"default_icon": "logo.png"
},
"permissions": [
"activeTab"
],
"background": {
"scripts": ["background.js"]
}
}
在您的后台脚本中,聆听对扩展图标的单击,并将jquery插入curlert选项卡中
background.js
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, {file: "jquery.min.js"});
});
使用
在这里,您可以放置类似于defaultsrc'self'的内容;脚本srchttps://cdn.com/jquery
其中cdn.com
是您下载jQuery的地方。再往前走一步,添加一个。如果CDN遭到破坏,变得恶意,或者您成为MITM'd,则哈希将不匹配,并且不会加载恶意脚本。此外,出于同样的原因,你永远不能真正信任插件
如果您决定不使用CDN,可以使用包管理器(如node或Bower),它将为您下载特定版本的jQuery。然后本地加载它。当然,对于生产,您通常希望使用CDN,以便访问者可以从更近的数据中心下载。另外,如果您使用的是Cloudflare,则很可能他们已经缓存了特定版本的jQuery,因此他们不必继续下载它
原型设计
如果您的动机是原型设计,那么有一些变通方法:
不推荐:您可以刮取网站,进行修改,然后呈现给客户
推荐:与其在实时网站上进行修改,不如进行快速原型制作。这样做的好处是:
- 如果你和客户坐下来,客户可以确切地看到你在做什么
- 你处理的是抽象的原型,而不是具体的细节,这些应该在合同中规定。有关骨架屏幕上的问题,请参阅<
var jq = document.createElement('script'); jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"; document.getElementsByTagName('head')[0].appendChild(jq); // ... give time for script to load, then type (or see below for non wait option) jQuery.noConflict();
$('div').length; //press Enter
jQuery('div').length
var script = document.createElement('script'); script.src = "https://code.jquery.com/jquery 3.4.1.min.js"; document.getElementsByTagName('head')[0].appendChild(script);