我希望我的内容脚本能够匹配所有谷歌域名和特定页面.我知道这是不可能的.
的manifest.json
"content_scripts": [{
"matches": [
,"*://www.google.*"
,"*://www.youtube.com/*"
,"*://readthedocs.org/*"]
,
....
Run Code Online (Sandbox Code Playgroud)
还有另一种方法吗?只是想在我列出Google所有域名之前确定:)
可以从后台脚本设置徽章文本。我想知道是否可以通过内容脚本来做到这一点。
我正在尝试构建一个基本的 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) 我正在尝试将消息从后台脚本发送到我的 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
在查看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 …
我正在使用我正在编写的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
我的总体目标是通过后台页面截取屏幕截图:
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
在我的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
我有一个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
我有一个chrome扩展,它将一个阴影dom元素注入页面以保持css分离.但是我需要将onclick绑定到内容脚本中的阴影dom中的一些元素,因为我需要能够通过单击阴影dom中的元素来调用内容脚本中的函数.
我已经尝试在模板元素中的元素和实际的阴影dom元素上使用.bind('click',function(){}),但我似乎无法访问它们.这可能吗?
content-script ×10
javascript ×6
iframe ×2
angularjs ×1
chrome-extension-manifest-v3 ×1
dom ×1
geolocation ×1
inject ×1
json ×1
match ×1
shadow-dom ×1