0

我有一个不常见的问题。

我无法访问公司 Drupal 网站的 head 或数据库,但是,我正在使用提供的“JS Injector”为该站点构建一个“插件”。

我在本地破解,只是将我的 javascript 复制/粘贴到注入器中(现在我想不出一个更糟糕的开发环境,产品开发需要永远)。

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

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

我可以通过它的来源获取脚本吗?我不能使用 jQuery 删除页面上的第二个 jQuery 脚本...可以吗?只是问就很痛。

这是我要删除的确切脚本,没有类型属性。只是一个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 之前删除对 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
})
4

1 回答 1

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.$而不是window.jQuery; 也许两者兼而有之。无论如何,我相信你明白了。希望能帮助到你。不要忘记 man window.watch,在 Firefox 中工作。

于 2015-08-30T19:53:33.977 回答