gpt4 book ai didi

javascript - 浏览器 native 注入(inject)

转载 作者:行者123 更新时间:2023-11-30 05:41:36 45 4
gpt4 key购买 nike

遵循此脚本: #content_script.js ,这是一种注入(inject)代码以获取参数中传递的值的方法。

或者更清楚(可以是任何 JavaScript 的函数):

(function() {
var parse = JSON.parse;
JSON.parse = function(){
console.log('Getting params: ', arguments);
return parse.apply(JSON, arguments)
};
JSON.parse.toString = function(){ return 'function parse() { [native code] }' };

var wss = WebSocket.prototype.send;
WebSocket.prototype.send = function(){
console.log('Getting params', arguments);
return wss.apply(this, arguments)
}
WebSocket.prototype.send.toString = function(){ return 'function send() { [native code] }' }
})();

但是,在在线游戏中,我不应该使用该方法,而是想将其注入(inject) JavaScript 引擎( native 代码)。不完全是我想知道如何开发,如果没有,我该怎么办?。如果我必须使用另一种编程语言或某种方法来做到这一点?

最佳答案

这很容易做到。下面的所有代码都是模板代码,这意味着所有插件的通用复制粘贴,略有调整。这是一个关于如何编写 firefox bootstrap 插件的小教程。它与此处基本相同,但针对您的工作进行了个性化设置:https://gist.github.com/Noitidart/9025999 (虽然我没有包括图标和本地化等细节)

  1. 在您的计算机上创建一个空文件夹
  2. 在其中创建这些空白的新文件:bootstrap.js 和 install.rdf 以及 chrome.manifest 和 inject.js
  3. 将此模板粘贴到 install.rdf 中:

    <?xml version="1.0" encoding="utf-8"?>
    <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
    <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
    <Description about="urn:mozilla:install-manifest">
    <em:id>Bootstrap-Skeleton@jetpack</em:id>
    <em:version>initial</em:version>
    <em:type>2</em:type>
    <em:bootstrap>true</em:bootstrap>
    <em:unpack>false</em:unpack>

    <!-- Firefox -->
    <em:targetApplication>
    <Description>
    <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
    <em:minVersion>7.0</em:minVersion>
    <em:maxVersion>27.0</em:maxVersion>
    </Description>
    </em:targetApplication>

    <!-- Front End MetaData -->
    <em:name>Bootstrap Skeleton</em:name>
    <em:description>How all bootstrap addons start.</em:description>
    <em:creator>Noitidart</em:creator>
    <em:contributor>Pat for Icon</em:contributor>
    <em:optionsType>2</em:optionsType>
    </Description>
    </RDF>
  4. 现在在我们粘贴的内容中替换 <em:id> 的内容与 DragonboundCheater@wZVanG

  5. 让我们更新 <em:name>到我们想要的插件的名称,让我们将其命名为Dragonbound Cheater
  6. 现在保存并转到 bootstrap.js
  7. 在 bootstrap.js 中粘贴此模板:

    function startup(aData, aReason) {}

    function shutdown(aData, aReason) {
    if (aReason == APP_SHUTDOWN) return;
    }

    function install() {}

    function uninstall() {}
  8. 现在用这个更新它的内容:

    const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
    Cu.import('resource://gre/modules/Services.jsm');
    var browserWinAddedTo;
    function startup(aData, aReason) {
    var recentBrowserWindow = Services.wm.getMostRecentWindow('navigator:browser');
    browserWinAddedTo = recentBrowserWindow;
    if (recentBrowserWindow.document.readyState == 'complete') { //on startup `aDOMWindow.document.readyState` is `uninitialized`
    recentBrowserWindow.messageManager.loadFrameScript('chrome://dragonboundcheater@wzvang/content/inject.js');
    } else {
    recentBrowserWindow.addEventListener('load', function () {
    recentBrowserWindow.removeEventListener('load', arguments.callee, false);
    recentBrowserWindow.messageManager.loadFrameScript('chrome://dragonboundcheater@wzvang/content/inject.js');
    }, false);
    }
    }

    function shutdown(aData, aReason) {
    if (aReason == APP_SHUTDOWN) return;
    browserWinAddedTo.messageManager.removeDelayedFrameScript('chrome://dragonboundcheater@wzvang/content/inject.js');
    }

    function install() {}

    function uninstall() {}
  9. 在 chrome.manifest 中添加:content dragonboundcheater ./

  10. 在 inject.js 中,我们现在可以做任何 js 想做的事,但首先要确保主机匹配,并查看 https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox/Frame_script_environment这告诉我们窗口对象由全局变量 content 引用。所以无论我们想访问哪里,我们都使用 content如果您想访问 js 环境,我们可以通过 content.wrappedJSObject 访问.所以让 inject.js 变成这样:

    (function() {
    var window = content;
    var js = window.wrappedJSObject;


    if (window.location.host.indexOf('dragonbound.net') == -1) {
    return;
    }

    var parse = js.JSON.parse;
    js.JSON.parse = function(){
    console.log('Getting params: ', arguments);
    return parse.apply(js.JSON, arguments)
    };
    js.JSON.parse.toString = function(){ return 'function parse() { [native code] }' };

    var wss = js.WebSocket.prototype.send;
    js.WebSocket.prototype.send = function(){
    console.log('Getting params', arguments);
    return wss.apply(this, arguments)
    }
    js.WebSocket.prototype.send.toString = function(){ return 'function send() { [native code] }' }
    })();
  11. 然后将文件夹中的所有内容压缩,将其从 .zip 重命名为 .xpi,然后拖入 firefox 和 voila :)

关于javascript - 浏览器 native 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102542/

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