最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - how to replace Head script using Greasemonkey code - Stack Overflow

programmeradmin0浏览0评论

i want to replace "script.js" to "demo.js". anyone please help me

<head>

    <script src="script.js" type="text/javascript" language="javaScript"></script>     

</head>

i want to replace "script.js" to "demo.js". anyone please help me

<head>

    <script src="script.js" type="text/javascript" language="javaScript"></script>     

</head>
Share Improve this question asked Apr 13, 2016 at 17:53 Noor AlamNoor Alam 771 silver badge7 bronze badges 1
  • Why was this downvoted? If it's a duplicate, it should be noted. – leewz Commented Feb 28, 2017 at 7:18
Add a ment  | 

2 Answers 2

Reset to default 11

Run your script early by @run-at document-start. Add an event listener beforescriptexecute and check the script source. When you detect the desired script, call preventDefault method of the event and replace the script tag in the DOM.

// ==UserScript==
// @name        demo-scriptreplace
// @include     http://example./*
// @version     1
// @run-at      document-start
// ==/UserScript==

window.addEventListener('beforescriptexecute',
  function(event)
  {
    var originalScript = event.target;

    // debug output of full qualified script url
    console.log('script detected:', originalScript.src);

    // script ends with 'originalscript.js' ?
    // you can test as well: '<full qualified url>' === originalScript.src
    if(/\/originalscript\.js$/.test(originalScript.src)) 
    { 
      var replacementScript = document.createElement('script');
      replacementScript.src = 'replacementscript.js';

      originalScript.parentNode.replaceChild(replacementScript, originalScript);

      // prevent execution of the original script
      event.preventDefault();
    }
  }
);

The question is actually not really descriptive, but Greasemonkey is actually using javascript. So let's assume you have "head" element in your page and you want this as a single element inside of "head" element.

That in Javascript you can achieve this by following:

var e = '<script src="script.js" type="text/javascript" language="javaScript"></script>';
document.head.innerHTML = e;

In order to append it you can just add plus sign infront of equal sign in second mand:

var e = '<script src="script.js" type="text/javascript" language="javaScript"></script>';
document.head.innerHTML += e;

EDIT: Eventually, if you have single script element pointing to such source javascript file, you can also use this to identify element and replace attribute value directly:

document.querySelectorAll('script[src="script.js"]')[0].setAttribute('src','demo.js');

EDIT: Important to point out is, that this answers the question how to replace. You still may need to prevent original script from being executed as mentioned by Quasimodo (though it was not part of question)

发布评论

评论列表(0)

  1. 暂无评论