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

时间:2015-08-30 16:32:30

标签: javascript drupal acquia

我有一个不寻常的问题。

我无法访问该公司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
})

1 个答案:

答案 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中工作。