我认为chrome扩展总体而言非常简单且非常强大,但总有一件事让我感到困惑的是尝试在代码可能运行的各种脚本之间进行通信.从浏览器操作的"default_popup"页面引用时会运行代码,"后台"的"脚本"属性中的代码和内容脚本.
在什么情况下,这些类别中的脚本运行,以及每个类别如何与其他类别进行通信?
我正在尝试在页面中加载(注入)javascript 代码。javascript 文件是扩展程序的本地文件。文件路径是“js/somefile.js”。
const basePath = chrome.runtime.getURL('');
fetch(chrome.runtime.getURL(filePath), { mode: 'same-origin' }) // <-- important
.then((_res) => _res.blob())
.then((_blob) => {
const reader = new FileReader();
reader.addEventListener('loadend', (data) => {
callback(data.currentTarget.result, basePath);
});
reader.readAsText(_blob);
});
const scriptTag = document.createElement('script');
scriptTag.innerHTML = scriptText;
scriptTag.type = 'text/javascript';
const scriptElement = document[injectLocation].appendChild(scriptTag);
if (removeImmediately) document[injectLocation].removeChild(scriptElement);
Run Code Online (Sandbox Code Playgroud)
我的网络可访问资源是:
"web_accessible_resources": [{
"resources": [
"js/*.js",
],
"matches": ["<all_urls>"]
}],
"content_security_policy": {
"extension_pages": "script-src 'self'; object-src 'self'",
"sandbox": "sandbox allow-scripts; script-src 'self' 'https://apis.google.com/' 'https://www.gstatic.com/' 'https://*.firebaseio.com' 'https://www.googleapis.com' 'https://ajax.googleapis.com'; object-src …Run Code Online (Sandbox Code Playgroud) javascript google-chrome-extension chrome-extension-manifest-v3
我想制作一个Chrome扩展程序,在其中提供一个新对象window.当在加载了扩展名的浏览器中查看网页时,我希望window.mything通过Javascript提供.该window.mything对象将具有我将在扩展中定义的一些函数,并且console.log当在启用了扩展的浏览器中查看页面时,这些函数应该可以从任何Javascript文件调用.
我能够使用内容脚本成功地将Javascript文件注入页面:
var s = document.createElement("script");
s.src = chrome.extension.getURL("mything.js");
document.getElementsByTagName("head")[0].appendChild(s);
Run Code Online (Sandbox Code Playgroud)
mything.js看起来像这样:
window.mything = {thing: true};
console.log(window);
Run Code Online (Sandbox Code Playgroud)
每当页面加载时,我都会看到整个window对象,因为我希望它在控制台中.但是,我无法window.mything从控制台与对象进行交互.似乎注入的脚本没有真正修改全局window对象.
如何window从Chrome扩展程序修改全局对象?
我通过Chrome扩展程序在页面末尾添加了一些外部JavaScript.然后外部JavaScript尝试将一些数据发布回服务器,但是没有发生.
JavaScript希望获取当前页面和引用者的URL并将其发回服务器.
任何人都可以请教我这里有什么问题,如果不可能这样我怎样才能将数据从当前页面发回服务器.
的manifest.json
{
"name": "Website Safety",
"version": "1.0",
"manifest_version": 2,
"description": "The Website Safety Extension.",
"browser_action": {
"name": "View the website information for ",
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs", "http://*/*", "https://*/*"
],
"background": {
// "scripts": ["refresh.js"]
"page": "background.html"
},
"content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'",
//"background_page": "background.html"
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["contentScript.js"]
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在是contentScript.js
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31046309-1']);
_gaq.push(['_setAllowLinker', true]);
_gaq.push(['_trackPageview']);
(function() {
var ga = …Run Code Online (Sandbox Code Playgroud) javascript dom google-analytics google-chrome-extension content-script
我现在正在制作Chrome扩展程序.我想从Chrome扩展中调用原始页面(选项卡)中定义的JS函数.是否background.html或Content_Script称呼它们并不重要.
例如:
原始页面(标签)
<html>
<head>
<title>Original Page</title>
<script>
function greeting(){
alert("Ohayou!");
// some other codes here
}
</script>
</head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)
然后我想在Google扩展程序中调用原始页面中的"问候语"功能.我怎么能做到这一点?
我目前正在构建一个Google Chrome扩展程序,用于测试某些模式,如果找到,则将其重定向到新的URL.
我已经通过内容脚本完成了模式检查,现在我不知道如何继续完成重定向.有什么建议 ?
我之前曾问过类似的问题
然而问题非常模糊,我现在知道我需要的是使用扩展名.
这个问题与以下类似,但不完全是我需要的信息.
我真正需要做的是从我的网站上运行用户计算机上的bat文件.该站点的用户将是公司的员工,他们将使用的计算机将由我们提供,因此我可以对机器进行任何必要的更改,以便在运送给用户之前使用.
我了解您可以在计算机上创建一个允许chrome访问的本地文件夹,从而保持安全性.我已经搜索了如何做到这一点,但似乎无法确定我需要搜索的内容,尤其是我需要帮助的地方.
http://developer.chrome.com/apps/fileSystem
我还没有建立扩展,但我愿意接受挑战,所以我不需要这方面的帮助.下面的两个指南似乎不仅仅是充足的.
http://lifehacker.com/5857721/how-to-build-a-chrome-extension
http://css-tricks.com/colorpeek-part-2-building-first-chrome-extension/
这是我目前所在的地方.
{
"name": "Open Till",
"version":"1",
"manifest_version": 2,
"description": "Allow POS Users to Open their Till",
"browser_action": {
"default_icon": "icon.jpg"
}
}
Run Code Online (Sandbox Code Playgroud)
我接下来需要实现的是创建一个命令来调用扩展,然后扩展导航到chrome可以访问的本地文件夹,然后执行批处理文件.
我意识到我可以通过使用npapi插件来解决对chrome文件夹的需求
https://developer.chrome.com/extensions/npapi
然而,这显然是一个潜在的雷区,所以我不想这样做.
如果有人能指出我如何创建文件夹和访问文件的正确方向,这将是非常感谢.
我已经有好几个月的问题,但这个概念很简单:我想阻止一些恶意网站™以编程方式打开标签或弹出窗口.
使用chrome.tabsAPI,我可以onCreated在创建新选项卡时监听,并且我可以轻松地检查谁(即哪个选项卡)打开该特定选项卡访问openerTabIdTab传递给回调函数的对象的属性.
现在,我想在创建一个新窗口时做同样的事情:我想知道哪个选项卡打开了窗口(如果有的话,因为它也可能已被用户打开),检查其URL以查看是否它是恶意网站™,并采取相应行动(即阻止弹出窗口).我尝试以完全相同的方式执行它:请求新窗口中的选项卡数组并检查它们的openerTabId属性,但不幸的是这样的属性没有定义!我搜索了文档和谷歌搜索了几个小时,但遗憾的是,看起来没有简单的方法来检查谁打开了一个窗口.
说明以上内容,我能够做到甚至远远接近我真正想要的东西的唯一方法是:
windowWatchlist.document.referrer,它应该包含哪些打开的标签网站的URL:如果参照网址包含恶意网站™的地址我想阻止弹出窗口,然后关闭窗口并从中删除windowWatchlist.windowWatchlist,它会从它删除.这是代码(在我的background.js脚本中运行):
// Called on chrome.windows.onCreated
function watchPopupWindow(window) {
windowWatchlist.push(window.id);
console.log('Added window #' + window.id + ' to watchlist.');
}
// Called on chrome.windows.onRemoved
function …Run Code Online (Sandbox Code Playgroud) 是否可以使用JavaScript来清除对使用AJAX进行实时更新的网页的所有更改?我希望每秒使用AJAX抓取更新数据的网站,我想抓住所有的变化.这是一个拍卖网站,只要用户出价,就可以更改多个对象.出价时,进行以下更改:
当前买入价当前高出价者拍卖定时器已将时间添加回其中
我希望使用基于JavaScript构建的Chrome扩展程序获取此数据.是否有JavaScript的AJAX监听器可以实现这一目标?工具包?我需要一些方向.JavaScript可以实现这个吗?
我正在开发Chrome扩展程序,有没有办法chrome.extension.getURL('file path')从注入文件中获取方法?我无法从注入的文件访问上述方法.
的manifest.json
{
"name": "Name",
"version": "0.1",
"description": "Name chrome extension",
"background": {
"persistent": false,
"scripts": ["js/background.js"]
},
"permissions": [
"tabs",
"https://*/*"
],
"content_scripts": [
{
"matches": ["https://mail.google.com/*"],
"js": ["js/content.js"],
"run_at": "document_end"
}
],
"web_accessible_resources": [
"js/injected.js",
"html/popup.html"
],
"manifest_version": 2
}
Run Code Online (Sandbox Code Playgroud)
injected.js
console.log("Ok injected file worked");
console.log("Url: ", chrome.extension.getURL('html/popup.html'));
Run Code Online (Sandbox Code Playgroud)
contentScript.js
var s = document.createElement('script');
s.src = chrome.extension.getURL('js/injected.js');
(document.head || document.documentElement).appendChild(s);
Run Code Online (Sandbox Code Playgroud)