我无法从我的内容脚本中获得响应以显示在我的popup.html中.当此代码运行并单击"查找"按钮时,"Hello from response!" 打印,但变量响应打印为未定义.最终目标是将当前选项卡的DOM放入我的脚本文件中,以便我可以解析它.我正在使用单个时间消息到内容脚本来获取DOM,但它没有被返回并且显示为未定义.我正在寻找任何可能的帮助.谢谢.
popup.html:
<!DOCTYPE html>
<html>
<body>
<head>
<script src="script.js"></script>
</head>
<form >
Find: <input id="find" type="text"> </input>
</form>
<button id="find_button"> Find </button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
manifest.json的:
{
"name": "Enhanced Find",
"version": "1.0",
"manifest_version": 2,
"description": "Ctrl+F, but better",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs",
"*://*/*"
],
"background":{
"scripts": ["script.js"],
"persistent": true
},
"content_scripts":[
{
"matches": ["http://*/*", "https://*/*"],
"js": ["content_script.js"],
"run_at": "document_end"
}
]
}
Run Code Online (Sandbox Code Playgroud)
的script.js:
var bkg = chrome.extension.getBackgroundPage();
function eventHandler(){
var input = …Run Code Online (Sandbox Code Playgroud) javascript message google-chrome google-chrome-extension content-script
我一直试图在chrome扩展中使用一些ajax.
我有一个内容脚本,应该在现有页面中添加一些html.
我试过了JQuery.get,JQuery.load而且ng-include.
所有这些都在控制台中显示一个警告,告诉我synchronous XHR已被弃用(这些不是同步的???).然后页面显示这种奇怪的行为,告诉我有些Pusher未定义,然后刷新页面并杀死我插入的div.
可能有什么不对?
示例代码 - 如果我启用第一个var txt,它可以很好地工作.如果我启用了第二个var txt(已注释),则失败.
//this first line works perfectly
var txt = '<div id="myNewDiv" ng-controller="myController">{{testing}}</div>';
//this shows the warning and a really weird behavior
//var txt = '<div id="myNewDiv" ng-controller="myController">{{testing}}<div ng-include="' + "'myhtml.html'" + '"></div></div>';
$('#a-certain-div-in-the-page').after(txt)
var app = angular.module('myApp', [])
.controller('myController', function($scope) {
$scope.testing = 'Welcome!';
});
angular.bootstrap(document, ['myApp']);
Run Code Online (Sandbox Code Playgroud) ajax jquery google-chrome-extension content-script angularjs
我正在尝试从 devtool 扩展中为 React 的渲染方法创建一个猴子补丁,因为我正在尝试为我的扩展中的一个功能重新创建类似于 react_devtool 的 api 的东西。我用这两行代码欺骗了被检查窗口的虚拟 DOM
var reactRoot = document.querySelector("[data-reactroot]")
var dom = reactRoot[Object.getOwnPropertyNames(reactRoot)[0]]
Run Code Online (Sandbox Code Playgroud)
我还听说通过访问窗口的__REACT_DEVTOOLS_GLOBAL_HOOK__. 我需要能够在页面更新时从 React 的 internalInstance 访问一组新数据(setState/rerender)。
这是我对 React 的渲染方法进行猴子修补的尝试。此代码从通过 my 注入的单独文件运行,该文件content-scripts.js能够在检查的窗口中访问 React 应用程序的 dom。
const reactInstances = window.__REACT_DEVTOOLS_GLOBAL_HOOK__._renderers
const instance = reactInstances[Object.keys(reactInstances)[0]]
console.log('current windows React INSTANCE: ', instance)
var reactRender = instance.Mount.render
console.log('reacts render method: ', reactRender)
reactRender = (function (original) {
return function (nextElement, container, callback) {
var result = original.apply(this, arguments)
console.log(original, result)
return result
} …Run Code Online (Sandbox Code Playgroud) javascript monkeypatching content-script reactjs react-devtools
我需要匹配我正在编写的简单 Firefox 扩展的所有域扩展。例如,我需要运行扩展:
我不希望扩展程序在“示例网站”以外的任何内容上运行,例如,
这在某种程度上很重要,这样我就不需要为我的扩展程序获得访问所有网站上的数据的权限。
笔记:
javascript firefox firefox-addon google-chrome-extension content-script
我无意中尝试从chrome内容脚本激活change()事件.我已经浏览了网站和谷歌帖子,但仍然无效.
这里是我试图实现的描述
考虑以下网页(如果有人帮助,可以通过http://www.gilzu.com/TFF/select.html访问):
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#woot').die('change');
$('#woot').live('change', function () {
$('#description').text(jQuery('#woot').val());
});
console.log("window ready");
$("#meh").click(function() {
$('#woot').val(15);
$('#woot').change();
});
$('#woot').val(21);
$('#woot').change();
});
</script>
</head>
<body>
<p>
<select id="woot">
<option id="Option1" value="15">a</option>
<option id="Option2" value="16">b</option>
<option id="Option3" value="17">c</option>
<option id="Option4" value="18">d</option>
<option id="Option5" value="19">e</option>
<option id="Option6" value="20">f</option>
<option id="Option7" value="21">g</option>
</select>
</p>
<p id="description"></p>
<p><input type="button" id="meh" /></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
什么工作:1.在启动时,change()激活并将选择框更新为21并在div上显示正确的值.2.按下#meh按钮,将选择框更改为15,触发在屏幕上显示正确值的change()事件.
到目前为止并不奇怪.
所以我通过以下方式前往内容脚本:
$(document).ready(function () {
$('#woot').val(17); …Run Code Online (Sandbox Code Playgroud) jquery google-chrome javascript-events google-chrome-extension content-script
使用开发人员工具查看扩展程序时,仅看到生成的背景文件background.js;我的内容脚本没有出现在“内容脚本”标签下。有什么想法吗?清单的相关部分如下所示:
"content_scripts": [{
"run_at": "document_end",
"js": ["postMsg.js"],
"matches": ["https://groups.google.com/forum/*"]
}],
Run Code Online (Sandbox Code Playgroud)
postMsg.js被注入到页面中,但是从未出现在开发者工具窗口中,因此我无法对其进行调试。
debugging developer-tools google-chrome-extension content-script
为Chrome扩展程序创建清单文件时,有一个选项all_frames允许将内容脚本注入顶部框架/ iframe,或者全部注入.
我希望此行为停止在某个特定级别(例如,2).有没有办法指定它,最好是在清单上?或者至少在实际脚本中有黑客攻击?
问题可能被翻译为:"是否可以知道HTML文档中框架的深度?
javascript iframe frame google-chrome-extension content-script
我正在写一个使用content_script的Chrome扩展程序。内容脚本使用XMLHttpRequest将有关页面的信息发送到我的服务器,并基于该信息服务器响应必须执行的操作。
在http页面上一切正常,但在http * s * 上失败。
我得到的错误是:[被阻止]已通过HTTPS加载了'== https page =='上的页面,但从'=== myserver-http ==='运行了不安全的内容:此内容也应通过HTTPS加载。
如果我将在服务器上使用https,它将起作用吗?即使是另一个域?没有在我的服务器上使用ssl的方法,有什么办法吗?
谢谢。
我将注入的内容脚本中的消息发送回Chrome扩展程序中的后台脚本,如下所示:
chrome.runtime.sendMessage({action: "myResult"});
Run Code Online (Sandbox Code Playgroud)
这很好,直到我重新加载我的扩展(通过转到设置 - >扩展 - >"重新加载(Ctrl + R)"为我的扩展.)
反过来,当我的后台脚本启动时,它反复调用chrome.tabs.executeScript所有打开的选项卡以编程方式重新注入我的内容脚本(正如我在这个问题中所示).
但是在我这样做之后,如果我sendMessage从我的内容脚本中调用第一行,它会抛出此异常:
错误:连接到扩展名my_extension_id时出错
知道为什么会这样吗?
javascript google-chrome google-chrome-extension content-script
我正在使用chrome扩展来自动填充演示数据.我创建了JavaScript文件" xyz.js"来自动填充数据.所以我通过单击按钮来执行脚本
chrome.tabs.executeScript(tabs[0].id, {file: "xyz.js"});而我正在获得所需的输出.
我没有使用内容脚本或后台脚本.使用内容脚本或后台脚本可以获得什么好处?