我有一个不寻常的问题。
我无法访问该公司Drupal网站的头部或数据库,但是,我正在使用提供的“JS Injector”为该网站构建“插件”。
我在本地破解,只是将我的javascript复制/粘贴到注入器中(我现在想不起,我想不到更糟糕的开发环境,产品开发需要永远)。
在我的急速中,我不小心把我需要的jQuery调用到本地。这主要是为了杀死页面,因为两次调用jQuery是不好的。页面paint / CSS呈现但我无法访问任何管理模块来编辑我更新的节点,因此我可以解决问题。
由于“自定义此页面”进行ajax调用以初始化任何Drupal后端UI内容。我的想法是从我设置的另一个内部页面访问JS Injector并运行一个脚本,该脚本可以以某种方式“到达”并在呈现之前删除我对jQuery的调用。
我可以通过它的来源获取脚本吗?我不能使用jQuery删除页面上的第二个jQuery脚本......我可以吗?那伤害只是问。
这是我要删除的确切脚本,没有type属性。只是一个src:
<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加载之前删除对jquery的调用。
解决方案(感谢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
})
答案 0 :(得分:1)
好的,这是你可以试试的。安装firefox,然后安装Greasemonkey扩展,这将允许您通过浏览器将js注入页面。 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>
标记),脚本会捕获并返回旧值。
每次构建新的jQuery时我都会调用noConflict
。我不知道您是否需要(查看您网站的源代码以了解它是否.noCoflict()
),也许您必须使用window.$
代替{{1} };也许两者。无论如何,我相信你明白了。希望能帮助到你。不要忘记男人window.jQuery
,在firefox中工作。