通过 chrome 扩展程序删除注入的脚本
Removing the injected script through the chrome extension
我正在构建一个 chrome 开发工具扩展来捕获页面元素并存储。现在,我能够通过在我注入的内容脚本中使用单击方法来捕获页面元素。为了将捕获的元素从内容脚本发送到后台脚本,我使用了 stopPropagation 和 preventDefault 方法来禁用元素上的单击事件。
问题陈述:现在我想在选择元素后恢复到元素的默认事件。这就是我被困在如何恢复的地方。
manifest.json:
{
"name": "My app",
"version": "0.0.1",
"description": "My app",
"manifest_version": 2,
"devtools_page": "devtools.html",
"background": {
"scripts": [
"background.js"
]
},
"permissions": [
"tabs",
"http://*/*",
"https://*/*",
"file://*/*"
]
}
该devtools.html
具有devtools.js
脚本,该脚本可在chrome开发工具中创建新的tab
面板并加载panel.html
。
面板.html:
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<button id="insertscript">Insert script</button>
<button id="clearscript">Clear Script</button>
<input type="text" id="tagName" />
<script src="panel.js"></script>
<script src="background.js"></script>
</body>
</html>
面板.js:
(function createChannel() {
var port = chrome.extension.connect({
name: "Sample Communication" //Given a Name
});
port.onMessage.addListener(function (message) {
document.querySelector('#tagName').value = message.tagName;
});
}());
function sendObjectToInspectedPage(message) {
message.tabId = chrome.devtools.inspectedWindow.tabId;
chrome.extension.sendMessage(message);
}
document.querySelector('#insertscript').addEventListener('click', function() {
sendObjectToInspectedPage({action: "script", content: "selectitem.js"});
}, false);
document.querySelector('#clearscript').addEventListener('click', function() {
sendObjectToInspectedPage({action: "clear-script", content: "clearscript.js"});
}, false);
背景.js:
chrome.extension.onConnect.addListener(function (port) {
var extensionListener = function(message, sender, sendResponse) {
if (message.tabId && message.content) {
// Attach a script to inspected page
if (message.action === "script") {
chrome.tabs.executeScript(message.tabId, {file: "assets/jquery-2.0.3.js"});
chrome.tabs.executeScript(message.tabId, {file: message.content});
} else if (message.action === "clear-script") {
chrome.tabs.executeScript(message.tabId, {code: "document.removeEventListener('click', onClick);"});
}
} else {
port.postMessage(message);
}
if (message.type === "selectedElement") {
sendResponse(message);
}
};
chrome.extension.onMessage.addListener(extensionListener);
port.onDisconnect.addListener(function(port) {
chrome.extension.onMessage.removeListener(extensionListener);
});
});
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
return true;
});
选择项目.js:
function onClick(evt) {
evt.stopPropagation();
evt.preventDefault();
var elem = document.elementFromPoint(evt.clientX, evt.clientY);
chrome.extension.sendMessage({
type: "selectedElement",
tagName: elem.tagName
});
}
document.addEventListener('click', onClick, true);
现在,当我单击Clear script
方法时,我想删除我在selectitem.js
中添加的stopPropagation和preventDefault。因为我选择的元素可以是Anchor
标签或Button
,也可以是任何可点击的内容。
我不知道该怎么做。
我在这个
脚本的帮助下找到了解决方案:https://github.com/oldprojects/Simple-JavaScript-DOM-Inspector/blob/master/inspector.js
认为这可能对任何人都有帮助,因此将其添加为答案。
相关文章:
- Safari扩展中的注入脚本;不要在Youtube上开火
- 通过innerHTML注入脚本:函数与全局
- 如何在访问其他url时在nodewebkit中注入脚本
- 按下按钮时动态注入脚本
- 是的.js在已加载的脚本上方注入脚本
- Chrome 扩展程序:在注入脚本之前,将数据从弹出窗口传递到另一个脚本文件
- 注入脚本以播放音频文件,如果 InnerText 与字符串不匹配
- 如何同步注入脚本
- 将值传递到“;注入脚本”;而不是依赖全局
- 正在使用ngBindHtml注入脚本标记
- 获取调用注入脚本的选项卡的url
- 如何在谷歌页面上搜索后注入脚本
- Chrome扩展:错误时发送消息从注入脚本回后台脚本
- 在注入脚本中使用扩展的localStorage包装器函数
- 从注入脚本到带有响应的内容脚本的通信
- 如何在protractor的浏览器实例中手动注入脚本标记
- tabs.executeScript()没有在扩展的内容页中注入脚本
- 错误注入脚本在其他选项卡在我的chrome扩展
- Angular 2 JSONP注入脚本没有调用回调错误
- Chrome扩展在页面加载前注入脚本