- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
遵循此脚本: #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 (虽然我没有包括图标和本地化等细节)
将此模板粘贴到 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>
现在在我们粘贴的内容中替换 <em:id>
的内容与 DragonboundCheater@wZVanG
<em:name>
到我们想要的插件的名称,让我们将其命名为Dragonbound Cheater
在 bootstrap.js 中粘贴此模板:
function startup(aData, aReason) {}
function shutdown(aData, aReason) {
if (aReason == APP_SHUTDOWN) return;
}
function install() {}
function uninstall() {}
现在用这个更新它的内容:
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() {}
在 chrome.manifest 中添加:content dragonboundcheater ./
在 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] }' }
})();
然后将文件夹中的所有内容压缩,将其从 .zip 重命名为 .xpi,然后拖入 firefox 和 voila :)
关于javascript - 浏览器 native 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102542/
我正在尝试测试依赖于其他服务 authService 的服务 documentViewer angular .module('someModule') .service('docu
如果我的网站上线(不要认为它会,目前它只是一个学习练习)。 我一直在使用 mysql_real_escape_string();来自 POST、SERVER 和 GET 的数据。另外,我一直在使用 i
我有以下代码,它容易受到 SQL 注入(inject)的攻击(我认为?): $IDquery = mysqli_query($connection, "SELECT `ID` FROM users W
我一直在自学如何创建扩展,以期将它们用于 CSS 注入(inject)(以及最终以 CSS 为载体的 SVG 注入(inject),但那是以后的问题)。 这是我当前的代码: list .json {
这个简单的代码应该通过 Java Spring 实现一个简单的工厂。然而结果是空指针,因为 Human 对象没有被注入(inject)对象(所以它保持空)。 我做错了什么? 谢谢 配置 @Config
我正在编写一个 ASP.NET MVC4 应用程序,它最终会动态构建一个 SQL SELECT 语句,以便稍后存储和执行。动态 SQL 的结构由用户配置以用户友好的方式确定,具有标准复选框、下拉列表和
首先让我说我是我为确保 SQL 注入(inject)攻击失败而采取的措施的知己。所有 SQL 查询值都是通过事件记录准备语句完成的,所有运算符(如果不是硬编码)都是通过数字白名单系统完成的。这意味着如
这是 SQL 映射声称可注入(inject)的负载: user=-5305' UNION ALL SELECT NULL,CONCAT(0x716b6b7071,0x4f5577454f76734
我正在使用 Kotlin 和 Android 架构组件(ViewModel、LiveData)构建一个新的 Android 应用程序的架构,并且我还使用 Koin 作为我的依赖注入(inject)提供
假设 RequestScope 处于 Activity 状态(使用 cdi-unit 的 @InRequestScope) 给定 package at.joma.stackoverflow.cdi;
我有一个搜索表单,可以在不同的提供商中搜索。 我从拥有一个基本 Controller 开始 public SearchController : Controller { protected r
SQLite 注入 如果您的站点允许用户通过网页输入,并将输入内容插入到 SQLite 数据库中,这个时候您就面临着一个被称为 SQL 注入的安全问题。本章节将向您讲解如何防止这种情况的发生,确保脚
我可以从什么 dll 中获得 Intercept 的扩展?我从 http://github.com/danielmarbach/ninject.extensions.interception 添加了
使用 NInject 解析具有多个构造函数的类似乎不起作用。 public class Class1 : IClass { public Class1(int param) {...} public
我有一个 MetaManager 类: @Injectable() export class MetaManager{ constructor(private handlers:Handler
我是 Angular 的新手,我不太清楚依赖注入(inject)是如何工作的。我的问题是我有依赖于服务 B 的服务 A,但是当我将服务 A 注入(inject)我的测试服务 B 时,服务 B 变得未定
我正在为我的项目使用 android 应用程序启动、刀柄和空间。我在尝试排队工作时遇到错误: com.test E/WM-WorkerFactory: Could not instantiate co
我不确定这是什么糖语法,但让我向您展示问题所在。 def factors num (1..num).select {|n| num % n == 0} end def mutual_factors
简单的问题,我已经看过这个了:Managing imports in Scalaz7 ,但我不知道如何最小化注入(inject) right和 left方法到我的对象中以构造 \/ 的实例. 我确实尝
在我的 Aurelia SPA 中,我有一些我想在不同模块中使用的功能。它依赖于调用时给出的参数和单例的参数。有没有办法创建一个导出函数,我可以将我的 Auth 单例注入(inject)其中,而不必在
我是一名优秀的程序员,十分优秀!