标签: content-script

来自chrome扩展中的内容脚本的未定义响应

我无法从我的内容脚本中获得响应以显示在我的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

6
推荐指数
1
解决办法
7580
查看次数

为什么我的ajax在Chrome扩展程序中调用同步?

我一直试图在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

6
推荐指数
1
解决办法
345
查看次数

在 devtools 扩展中猴子修补反应的渲染方法

我正在尝试从 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

6
推荐指数
0
解决办法
436
查看次数

如何匹配内容脚本(firefox)中的所有域名扩展?

我需要匹配我正在编写的简单 Firefox 扩展的所有域扩展。例如,我需要运行扩展:

我不希望扩展程序在“示例网站”以外的任何内容上运行,例如,

这在某种程度上很重要,这样我就不需要为我的扩展程序获得访问所有网站上的数据的权限。

笔记:

javascript firefox firefox-addon google-chrome-extension content-script

6
推荐指数
1
解决办法
979
查看次数

从chrome扩展内容脚本中选择<select>的<option>

我无意中尝试从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

5
推荐指数
1
解决办法
2501
查看次数

无法在开发人员工具窗口中查看内容脚本引用

使用开发人员工具查看扩展程序时,仅看到生成的背景文件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

5
推荐指数
1
解决办法
1750
查看次数

如何在Chrome扩展程序中控制(i)注入内容脚本的帧深度?

为Chrome扩展程序创建清单文件时,有一个选项all_frames允许将内容脚本注入顶部框架/ iframe,或者全部注入.

我希望此行为停止在某个特定级别(例如,2).有没有办法指定它,最好是在清单上?或者至少在实际脚本中有黑客攻击?

问题可能被翻译为:"是否可以知道HTML文档中框架的深度?

javascript iframe frame google-chrome-extension content-script

5
推荐指数
1
解决办法
1472
查看次数

AJAX被Chrome扩展程序content_script阻止

我正在写一个使用content_script的Chrome扩展程序。内容脚本使用XMLHttpRequest将有关页面的信息发送到我的服务器,并基于该信息服务器响应必须执行的操作。

在http页面上一切正常,但在http * s * 上失败。

我得到的错误是:[被阻止]已通过HTTPS加载了'== https page =='上的页面,但从'=== myserver-http ==='运行了不安全的内容:此内容也应通过HTTPS加载。

如果我将在服务器上使用https,它将起作用吗?即使是另一个域?没有在我的服务器上使用ssl的方法,有什么办法吗?

谢谢。

javascript ajax google-chrome-extension content-script

5
推荐指数
1
解决办法
3058
查看次数

重新加载Chrome扩展程序后,chrome.runtime.sendMessage会从内容脚本中抛出异常

我将注入的内容脚本中的消息发送回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

5
推荐指数
1
解决办法
2029
查看次数

chrome扩展中的内容脚本和后台脚本究竟是什么?

我正在使用chrome扩展来自动填充演示数据.我创建了JavaScript文件" xyz.js"来自动填充数据.所以我通过单击按钮来执行脚本 chrome.tabs.executeScript(tabs[0].id, {file: "xyz.js"});而我正在获得所需的输出.

我没有使用内容脚本或后台脚本.使用内容脚本或后台脚本可以获得什么好处?

google-chrome google-chrome-extension content-script

5
推荐指数
2
解决办法
9223
查看次数