标签: content-script

Chrome扩展程序:在所有Google域和特定页面上运行

我希望我的内容脚本能够匹配所有谷歌域名和特定页面.我知道这是不可能的.

的manifest.json

"content_scripts": [{
        "matches": [
           ,"*://www.google.*"
           ,"*://www.youtube.com/*"
           ,"*://readthedocs.org/*"]
       ,
       ....
Run Code Online (Sandbox Code Playgroud)

还有另一种方法吗?只是想在我列出Google所有域名之前确定:)

google-chrome match google-chrome-extension content-script

3
推荐指数
1
解决办法
1396
查看次数

如何从内容脚本在 chrome 扩展中设置徽章文本?

可以从后台脚本设置徽章文本。我想知道是否可以通过内容脚本来做到这一点。

google-chrome-extension content-script

3
推荐指数
1
解决办法
1893
查看次数

从浏览器操作弹出窗口:打开一个新选项卡并填写输入字段

我正在尝试构建一个基本的 Chrome 扩展程序,该扩展程序从浏览器操作弹出窗口中,在新选项卡中打开一个网站,并填写登录凭据。我可以使用 Chrome 扩展程序打开新页面,但似乎无法将文本输入到输入字段中。

清单文件

{
  "manifest_version": 2,

  "name": "Vena",
  "description": "This extension will allow users to login to vena accounts",
  "version": "1.0",

  "browser_action": {
   "default_icon": "images/icon.png",
   "default_popup": "popup.html"
  },
  "permissions": [
   "activeTab"
   ]
}
Run Code Online (Sandbox Code Playgroud)

弹出窗口.html

<!doctype html>
<html>
  <head>
    <title>Auto-Login</title>
    <script src="popup.js"></script>
  </head>
  <body>
    <h1>Login</h1>
    <button id="checkPage">Login!</button>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

弹出窗口.js

document.addEventListener('DOMContentLoaded', function() {
  var checkPageButton = document.getElementById('checkPage');
  checkPageButton.addEventListener('click', function() {

    var newURL = "https://vena.io/";
    chrome.tabs.create({ url: newURL });

    var loginField = document.getElementsByClassName('js-email form-control input-lg');
    var passwordField = document.getElementsByClassName('js-password …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome-extension content-script

3
推荐指数
1
解决办法
2312
查看次数

后台脚本:错误:无法建立连接。接收端不存在

我正在尝试将消息从后台脚本发送到我的 chrome 扩展中的内容脚本。但看起来消息是在加载内容脚本之前发送的?

这是我正常使用扩展程序时遇到的错误:

Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.
Run Code Online (Sandbox Code Playgroud)

这是我的后台脚本,其tabs.onUpdated功能为:

chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {

    if (changeInfo.url) {
        console.log(changeInfo.url, tabId)
        chrome.tabs.sendMessage(tabId, {
            url: changeInfo.url,
            type: 'URL_CHANGE'
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

这是我的内容脚本接收函数:

chrome.runtime.onMessage.addListener((obj, sender, response) => {
    console.log('received', obj)
    if (obj.type === 'URL_CHANGE') {
        console.log('testestsetst')
        getAuth()
        getUrlType(obj.url)
    } else if (obj.type === 'AUTH') {
        getAuth()
    } else if (obj.type === 'UN-AUTH') {
        removeAuth()
    }
});
Run Code Online (Sandbox Code Playgroud)

每当我正常运行扩展时,我都看不到内容脚本的输出,并且收到如上所述的错误。但是,当我调试后台脚本并单步执行代码时,我没有收到错误,并且我的内容脚本正确打印了所有内容。这可能是由于页面需要加载造成的吗?如果是这样,我该如何解决这个问题?

google-chrome-extension content-script service-worker chrome-extension-manifest-v3

3
推荐指数
1
解决办法
9900
查看次数

Chrome扩展程序:如何使用内容脚本检测是否安装了扩展程序

在查看stackoverflow上的几个相关问题后,我问这个问题.我从如何检测是否安装了扩展开始.我选择了在某些页面上使用内容脚本向主体添加div的方法.我是这样做的......

的manifest.json

{
    "name": "Install Check",
    "content_scripts": [
        {
            "matches": ["http://host.com/*"],
            "js" : ["insert_node.js"]
        }
    ],
    "permissions": [
        "tabs", "host.com/*"
    ]
}
Run Code Online (Sandbox Code Playgroud)

insert_node.js(内容脚本)

var insert_node = document.createElement('div');
insert_node.id = "HOST_SITE";
document.body.appendChild(insert_node);
Run Code Online (Sandbox Code Playgroud)

主页

<html>
<head>
</head>
<body>
    <h1>This is a host site. Welcome!!!</h1>
    <script src="jquery.js"></script>
    <script src="notification.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

扩展安装脚本

$(document).ready(function() {
    if ($('#HOST_SITE').length > 0) {
        alert("you have our extension installed");
    } else {
        alert("not installed");
    }
});
Run Code Online (Sandbox Code Playgroud)

我的问题是,在not_installedchrome可以在DOM中注入节点之前,始终会弹出带消息的警报.我在这里读了manifest.json中的run_at属性.但这也没有解决问题.我尝试了所有三,,值.我在这里做错了什么?document_startdocument_idle …

google-chrome inject google-chrome-extension content-script

2
推荐指数
1
解决办法
7619
查看次数

我在清单中设置了地理位置权限,但每个页面仍然要求共享位置

我正在使用我正在编写的chrome扩展中的内容脚本.我包含geolocation在我的权限列表中,但在每个网页上,我仍然会被问到是否要分享我的位置.

我想如果我geolocation在权限列表中设置,我会避免这种情况吗?这是我的相关代码manifest.json:

"permissions": ["geolocation"],
"content_scripts": [
 {
   "matches": ["<all_urls>"],
   "js": ["main.js"]
 }
]
Run Code Online (Sandbox Code Playgroud)

以及我如何使用它:

navigator.geolocation.getCurrentPosition(function(position) {
    console.log("latitude=" + position.coords.latitude +
    ", longitude=" + position.coords.longitude);
});
Run Code Online (Sandbox Code Playgroud)

javascript geolocation google-chrome-extension content-script

2
推荐指数
1
解决办法
1710
查看次数

Chrome Extension API:背景页面上的chrome.tabs.captureVisibleTab到内容脚本

我的总体目标是通过后台页面截取屏幕截图:

http://developer.chrome.com/extensions/tabs.html#method-captureVisibleTab

并将其传递给内容脚本,以便我可以使用页面的HTML DOM来分析屏幕截图并按照我想要的方式进行切割.

但是,我似乎无法通过Message Passing将dataUrl传递回内容脚本:

http://developer.chrome.com/extensions/messaging.html

我试过JSON.stringify(),但无济于事.

这非常好用:

background.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        sendResponse({imgSrc:'hello'});
    }
);
Run Code Online (Sandbox Code Playgroud)

我将代码切换到此,没有任何通过:

background.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        chrome.tabs.captureVisibleTab(
            null,
            {},
            function(dataUrl)
            {
                sendResponse({imgSrc:dataUrl});
            }
        )
    }
);
Run Code Online (Sandbox Code Playgroud)

我唯一证明背景页面实际上是截屏的是我可以做到的

chrome.tabs.captureVisibleTab(null,{},function(dataUrl){console.log(dataUrl);});
Run Code Online (Sandbox Code Playgroud)

我明白了

"数据:图像/ JPEG; BASE64,/ 9J/4AAQSkZJRgABAQAAA ....等..."

登录background.html,这是有效的

我的问题是:如何将此URL发送到内容脚本?

我不希望在后台页面上执行所有逻辑,这些逻辑无法控制实际可见页面上的任何内容.

javascript json message-passing google-chrome-extension content-script

2
推荐指数
1
解决办法
7574
查看次数

无法将内容脚本注入我的Chrome扩展程序的所有IFRAME中

在我的Google Chrome扩展程序中,我需要能够将我的内容脚本注入IFRAME页面上的所有内容.要做到这一点,我的原件manifest.json被声明为:

"content_scripts": [
    {
        "run_at": "document_end",
        "all_frames" : true,
        "matches": ["http://*/*", "https://*/*"],
        "js": ["content.js"]
    }
],
Run Code Online (Sandbox Code Playgroud)

这似乎适用于大多数网站,直到我遇到一个IFRAME声明如此:

(来自Chrome调试器) 在此输入图像描述

这是它的HTML:

<iframe id="wysiwygtext_ifr" src='javascript:""' frameborder="0" allowtransparency="true" title="Rich Text Area." style="width: 100%; height: 341px; display: block;"></iframe>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我的内容脚本不会注入其中IFRAME.

我尝试更改matches过滤器,"matches": ["<all_urls>"]但仍然没有这样做.

有没有办法为我注入我的内容脚本中的IFRAME那样?

javascript iframe google-chrome google-chrome-extension content-script

2
推荐指数
1
解决办法
2473
查看次数

Chrome扩展程序 - 注入的iframe无法访问Chrome浏览器动作或chrome.tabs或AngularJS

我有一个Chrome扩展程序,可以通过浏览器操作点击来切换侧边栏.侧边栏包含带有本地(Chrome扩展程序)源的iframe.我认为iframe中的页面将被视为本地chrome扩展文件,可以打开访问chrome API等.但是,我在Web控制台中不断收到以下错误:

未捕获的TypeError:无法读取未定义< - background.js的属性'onClicked'

TypeError:无法读取undefined < - sidebar.js的属性'query'

如何获取它以便使用上下文脚本注入的iframe可以访问本地chrome环境?

代码如下:

sidebar.js:

var myApp = angular.module('PlaceMates', []);


myApp.service('pageInfoService', function() {
    this.getInfo = function(callback) {
        var model = {};

        chrome.tabs.query({
            'active': true,               // Select active tabs
            lastFocusedWindow: true     // In the current window
        },
        function (tabs) {
            if (tabs.length > 0)
            {
                model.title = tabs[0].title;
                model.url = tabs[0].url;

                chrome.tabs.sendMessage(tabs[0].id, { 'action': 'PageInfo' }, function (response) {
                    model.pageInfos = response;
                    console.log("popup js: " + model.pageInfos);
                    callback(model);
                });
            }

        });
    }; …
Run Code Online (Sandbox Code Playgroud)

javascript iframe google-chrome-extension content-script angularjs

2
推荐指数
1
解决办法
1423
查看次数

是否可以将事件侦听器绑定到外部脚本的阴影dom中的元素?

我有一个chrome扩展,它将一个阴影dom元素注入页面以保持css分离.但是我需要将onclick绑定到内容脚本中的阴影dom中的一些元素,因为我需要能够通过单击阴影dom中的元素来调用内容脚本中的函数.

我已经尝试在模板元素中的元素和实际的阴影dom元素上使用.bind('click',function(){}),但我似乎无法访问它们.这可能吗?

javascript dom google-chrome content-script shadow-dom

2
推荐指数
1
解决办法
3046
查看次数