gpt4 book ai didi

javascript - 如何在正文中获取调用 jquery 的 cdn 的脚本标记并在 jQuery 加载之前将其删除?

转载 作者:行者123 更新时间:2023-12-03 09:01:17 25 4
gpt4 key购买 nike

我有一个不常见的问题。

我无权访问该公司 Drupal 网站的头部或数据库,但是,我正在使用提供的“JS 注入(inject)器”为该网站构建一个“插件”。

我在本地进行破解,然后将我的 JavaScript 直接复制/粘贴到注入(inject)器中(现在我想不出更糟糕的开发环境了,产品开发需要永远)。

在匆忙中,我不小心将本地需要的 jQuery 调用放入其中。这主要会杀死页面,因为调用 jQuery 两次是不好的。页面绘制/CSS 呈现,但我无法访问任何管理模块来编辑我更新的节点,因此我可以解决问题。

由于“自定义此页面”会进行 ajax 调用来初始化任何 Drupal 后端 UI 内容。我的想法是从我设置的另一个内部页面访问 JS 注入(inject)器并运行一个脚本,该脚本可以以某种方式“进入”并在渲染之前删除对 j​​Query 的调用。

我可以通过源代码获取脚本吗?我无法使用 jQuery 删除页面上的第二个 jQuery 脚本...可以吗?光是问就很痛苦。

这是我试图删除的确切脚本,没有类型属性。只是一个源代码:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>


function getScript()
{
var s;
s = document.getElementsByTagName('script');

if(s.querySelector('[src]') === "https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"){
this.remove;
}
}
removeScript();

这样的事情可能吗?

td;dr 在 jquery 加载之前删除对 j​​query 的调用。

解决方案(感谢 Serge Seredenko):

// ==UserScript==
// @name test script
// @namespace test
// @include http://your.website.com/
// @version 1
// @grant unsafeWindow
// @run-at document-start
// ==/UserScript==

unsafeWindow.watch('jQuery', function(i, o, n) {
n.noConflict()
if (unsafeWindow.__old_jQuery)
return unsafeWindow.__old_jQuery
unsafeWindow.__old_jQuery = n
return n
})

最佳答案

好的,您可以尝试以下方法。安装firefox,然后安装Greasemonkey扩展,它可以让你通过浏览器将js注入(inject)到页面中。 Greasemonkey 脚本允许 @run-at document-start指令(阅读手册),这意味着它们将在加载 html 之前运行。现在,您必须想出一些方法来使用 jQuery 施展魔法。我亲自尝试过这个,并且有效:

// ==UserScript==
// @name test
// @namespace test
// @include http://manage/arena/*
// @version 1
// @grant none
// @run-at document-start
// ==/UserScript==

unsafeWindow.watch('jQuery', function(i, o, n) {
n.noConflict()
if (unsafeWindow.__old_jQuery)
return unsafeWindow.__old_jQuery
unsafeWindow.__old_jQuery = n
return n
})

如您所见,我在这里所做的是捕获第一个加载的 jQuery 对象并保存它。万一有人试图重新分配 window.jQuery属性(例如,新的 <script> 标记),脚本捕获该属性并返回旧值。
我还包括noConflict每次构建新的 jQuery 时都会调用。我不知道你是否需要这个(查找你网站的源代码以了解它是否需要 .noCoflict() ),也许你将不得不使用 window.$ 做一些事情而不是window.jQuery ;也许两者都有。不管怎样,我相信你明白了。希望能帮助到你。别忘了男人window.watch ,在 Firefox 中工作。

关于javascript - 如何在正文中获取调用 jquery 的 cdn 的脚本标记并在 jQuery 加载之前将其删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32298786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com