我正在尝试删除监听器。在控制台中,下面的代码正在运行。当我在 Chrome 扩展中使用代码时,我得到:“Uncaught ReferenceError:getEventListeners 未定义”。为什么会出现这种情况?是否有与“getEventListeners”功能等效的函数?
document.addEventListener('click', fireContentLoadedEvent, false);
function fireContentLoadedEvent () {
console.log ("DOMContentLoaded");
for (let i = 0; i < document.getElementsByClassName("someClass").length; i++) {
plusButton = document.getElementsByClassName("someClass")[i]
if ( getEventListeners(plusButton)["click"].length > 1) {
plusButton.removeEventListener("click", getEventListeners(plusButton).click[1].listener);
}
}
}
Run Code Online (Sandbox Code Playgroud) javascript google-chrome google-chrome-extension referenceerror google-chrome-devtools
我正在尝试将 Chrome 扩展程序从 Manifest 2 迁移到 Manifest 3,但出现以下错误
拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src 'self' 'wasm-unsafe-eval'”。启用内联执行需要“unsafe-inline”关键字、哈希值(“sha256-ClANdr6bWuUdXWELI09IBiITbU5zbvg6V1dZp9mr55Q=”)或随机数(“nonce-...”)。
对于代码
我尝试添加
"content_security_policy": {
"extension_page": "script-src 'self' 'sha256-ClANdr6bWuUdXWELI09IBiITbU5zbvg6V1dZp9mr55Q='"
},
Run Code Online (Sandbox Code Playgroud)
清单,但没有帮助
我该如何解决?
我正在开发一个镀铬扩展,并遇到了一个大问题.
我正在使用内容脚本在网站上注入我的javascript代码.该网站有一个iframe.我可以更改iframe的源代码,但似乎无法访问iframe的contentWindow属性.我需要它在当前的carret位置插入文本.
所以基本上这个代码在页面的上下文中完美地工作:
$("#iframe1").contentWindow.document.execCommand("InsertHTML", false, 'test text');
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在我的chrome扩展程序的上下文中运行时,我收到此错误:
TypeError: Cannot read property 'document' of undefined
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我可以访问iframe的html.所以这段代码完全可以从chrome扩展程序中运行:
$("#iframe1").contents().find('div').html('test')
Run Code Online (Sandbox Code Playgroud)
我尝试在清单文件中放入"all_frames":true但没有运气:(
一般问题:当像Array这样的默认Javascript原型被修改,黑客攻击,更改并扭曲到无法使用时,有没有办法创建(或重新实现)原始的,未修改的原型的实例?
我的情况:我有一些代码在(可怕的,专有的,封闭源代码......)内容管理系统的"编辑"模式下失败,因为内容的"编辑"模式界面的javascript管理系统破坏了Array原型的绝对生活地狱.
我的代码将在CMS的非编辑模式下工作,但是,为了实现这一目标,它已经在"编辑"模式下进行了测试.可以测试原型是否已被修改.是否有可能重新实现默认的Array原型,所以我可以这样做:
var hasArrayBeenTrashed = // boolean based on https://stackoverflow.com/questions/574584/
var normalArray.prototype = // based on answer to this question
var myArray = !hasArrayBeenTrashed ? [] : new normalArray;
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Google Chrome扩展程序,用于模拟网页上的键盘事件.
我发现event.initKeyboardEvent()因为这个webkit bug 而无法正常工作,我也找到了一些解决方法,例如SO Question
但是,在事件对象上定义属性不起作用,因为扩展的内容脚本具有自己的"并行世界",因此内容脚本中定义的属性对于Web页脚本不可见.
我唯一也是最后希望DOM 4 Event Constructors在Google Chrome中运行,并且可以通过构造函数正确初始化键盘事件
var event = new KeyboardEvent("keypress", {key: 'U+0041', char: 'a', ... })
Run Code Online (Sandbox Code Playgroud)
不幸的是,它失败了:
TypeError: illegal constructor
Run Code Online (Sandbox Code Playgroud)
我无法在Chrome中找到有关受支持的事件构造函数的任何文档.有人能指点我一些文档/源代码吗?
是否有其他方法可以在Google Chrome扩展程序中模拟键盘事件?
(注意,TextEvent,并将不会帮助,因为许多现实世界的控制听keydown/ keyup专)
javascript google-chrome google-chrome-extension dom-events content-script
根据维基百科关于Bookmarklets的文章(http://en.wikipedia.org/wiki/Bookmarklet),Bookmarklets的概念是:
Web浏览器将URI用于标记的href属性和书签.URI方案(例如http:,file:或ftp:)指定协议和字符串其余部分的格式.浏览器还实现了一个前缀javascript:对解析器来说就像任何其他URI一样.在内部,浏览器看到指定的协议是javascript,将字符串的其余部分视为JavaScript应用程序然后执行,并将结果字符串用作新页面.
它表示结果字符串用作新页面.那么这是否意味着浏览器的原始DOM不受该字符串的影响?但是,如果只将结果字符串用作新页面,我如何在现有DOM中更改或注入新的DOM元素?因为脚本提醒Hello或注入一些新的DOM元素并没有真正返回任何内容.他们有点在现有的DOM上工作.
现在,在Internet Explorer中,除了使用Bookmarklets在页面上执行一些JavaScript之外,我还可以编写一个BHO插件并按以下方式注入:
document = (HTMLDocument)webBrowser.Document;
var injectedJS = System.IO.File.ReadAllText("InjectedJS.js");
var window = document.parentWindow;
window.execScript("(function(){ " + injectedJS + " })()");
Run Code Online (Sandbox Code Playgroud)
同样在chrome中,我可以编写一个扩展来实现同样的目的:
var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
s.onload = function() {
this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);
Run Code Online (Sandbox Code Playgroud)
这些有何不同?我所拥有的高级问题是:
execScript方法或在浏览器中使用javascript:protocol 执行JavaScript的方式有什么不同吗?javascript bho bookmarklet javascript-injection google-chrome-extension
我正在尝试使用用户脚本更改页面中的变量.我知道在源代码中有一个变量
var smilies = false;
Run Code Online (Sandbox Code Playgroud)
从理论上讲,我应该能够改变它:
unsafeWindow.smilies = true;
Run Code Online (Sandbox Code Playgroud)
但它不起作用.当我试图警告或将变量记录到控制台而没有劫持时,我得到它是未定义的.
alert(unsafeWindow.smilies); // undefined !!!
Run Code Online (Sandbox Code Playgroud)
编辑:如果它改变了什么,我正在使用Chrome ...
http://code.google.com/chrome/extensions/content_scripts.html说:
内容脚本在称为孤立世界的特殊环境中执行.他们可以访问注入页面的DOM,但不能访问页面创建的任何JavaScript变量或函数.它将每个内容脚本视为在其运行的页面上没有执行其他JavaScript.
这是关于Chrome扩展,但我猜这与用户脚本也是一样的?
谢谢你,Rob W.所以需要它的人的工作代码:
var scriptText = "smilies = true;";
var rwscript = document.createElement("script");
rwscript.type = "text/javascript";
rwscript.textContent = scriptText;
document.documentElement.appendChild(rwscript);
rwscript.parentNode.removeChild(rwscript);
Run Code Online (Sandbox Code Playgroud) 我正在寻找网页内的功能te激活chrome扩展.
想象一下,http://www.example.com/test.html包含:
<script>
hello();
</script>
Run Code Online (Sandbox Code Playgroud)
我的背景页面包含hello函数的定义:
function hello() {
alert("test");
}
Run Code Online (Sandbox Code Playgroud)
如何确保hello在test.html通话时调用Chrome扩展程序的后台页面hello();?
javascript google-chrome google-chrome-extension content-script
我正在开发Chrome扩展程序.我想在(第一次)页面加载发生时修改一些内容.我不知道如果我使用的方法getContent()中chrome.devtools.network.onRequestFinished.addListener,我怎么能修改的内容是从方法返回后?
这种方法仅用于网络/流量观察吗?我可以修改响应正文吗?
javascript ×8
arrays ×1
bho ×1
blob ×1
bookmarklet ×1
browser ×1
chrome-extension-manifest-v3 ×1
dom-events ×1
iframe ×1
image ×1
object ×1
prototype ×1
userscripts ×1