无法在除我的浏览器/机器以外的其他浏览器/机器中运行我的 chrome 扩展程序:解压缩的发行版中有些不匹配?



对不起,我的英语不好,希望你能理解这个问题。

我是 chrome 扩展开发的新手,在我的代码中肯定有很多 要更改或优化的东西; 无论如何,我已经编写了一个简单的代码,(似乎(至少可以在我的Chrome上工作。

代码在特定页面中每 X 分钟单击一个按钮,然后等待并解析页面中的结果。

我有 :

  • 一个内容脚本(从manifest.json加载(,在页面中"注入"一些按钮和文本输入框,因此用户可以在单击"开始按钮"之前设置一些"过滤器参数"; 然后开始按钮将消息((发送到后台.js以设置单击的警报事件;

  • 一个事件页面(实际上设置为持久 true(,它处理来自选项卡的请求并为每个选项卡设置倒计时警报; 当 X 分钟被传递时,向感兴趣的选项卡发送一条消息;

我还有一个弹出窗口.html e 弹出窗口.js在这里并不重要(我认为(。

我必须手动分发此扩展,因此我将分发一个用户可以加载"开发人员模式"的zip。

*现在的问题是:为什么代码只能在我的Chrome上运行?

我已经用其他人测试了 2-3 台带有 Chrome 的笔记本电脑,后台脚本已加载(我可以看到背景页面 printint 控制台日志(

但是在网页上的内容.js似乎无法执行。

在我的 chrome 中运行良好:我可以在控制台中看到一些初始输出(我打印要检查的 dir 扩展名的名称(和 动态创建的元素(按钮,输入框等( 在页面中。

一切正常,我可以触发开始按钮并接收解析结果。

在开发过程中,我从未在其他机器上运行过扩展。昨天我已经在 2-3 台笔记本电脑上成功进行了测试。然后我只做了一些改变,但没有什么严重的。

今天我只能在我的铬中运行。

在其他 PC 中什么都没有,简单的控制台.log输出第一行脚本。

我可以在控制台日志中读取: "未检查的运行时。上次错误: 无法建立连接。接收端不存在。但这也在我的工作状态在我的笔记本电脑铬.

zip文件是一样的,提取也很好,其实我实际上可以加载扩展,我看到后台页面调试控制台.log((句子

在某些情况下,在笔记本电脑中,它不起作用,我收到了一条与jQuery相关的消息,并且没有定义chrome.runtime.sendMessage((;它指向网页中的代码,而不是我的。

我看到在网页代码中有类似的东西:

var extid = "mcmhdskbnejjjdjsdkksmeadjaibo";
var extVer = "1.5";
var extStatus = 0;
$(document).ready(function () { 
///...
chrome.runtime.sendMessage(extid, {message: "version"},
function (reply) {
if (reply) {
if (reply.version) {
if (reply.version == extVer) {
if (reply.gminfo != 'OK') {
extStatus = 1; /// ...

似乎chrome.runtime是未定义的,网页无法调用sendMessage((。 编辑:仅当我的扩展加载时,才会发生此未定义

也许在加载扩展时存在一些冲突?但是在我的 chrome 浏览器中工作...

一些专家可以指出我必须调查的方向吗?

非常感谢您的任何建议。

我的清单.json :

{"manifest_version": 2,
"name": "myAlarm",
"description": "This extension alerts.",
"version": "0.1",
"permissions": [
"alarms",
"system.cpu",
"storage",
"tabs",
"webNavigation",
"https://www.mytargetsite.com/subUrl/"
],
"web_accessible_resources": [
"icon.png",
"vanillaSelectBox.css"],
"content_scripts": [
{
"matches": ["https://www.mytargetsite.com/subUrl/"],
"css": ["vanillaSelectBox.css"],
"js": ["jquery-3.3.1.min.js","vanillaSelectBox.js","taffy-min.js","content.js"],
"run_at": "document_end"
}
],
"background": {
"scripts": ["eventPage.js"],
"persistent": true
},
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"icons": {
....
}
}

我的内容,js(剥离(:

chrome.runtime.onMessage.addListener(
function(request, sender) {
// here i parse message "time'up" from background js    
});
window.addEventListener('load', function() {
var pt=chrome.runtime.getURL('filterOff.wav'); 
var p=pt.split("/");
console.log("[myAlarm v0.1] started" );
console.log("[myAlarm v0.1] folder : ("+p[2]+")");
// here i start an active wait for the presence in page of button with ID= btntarget_id
waitForElementToDisplay("#btntarget_id", 500); //when function find button then create and add button and input text to webpage
});

我的活动页面.js :

var curr_alarms =[];
chrome.extension.onMessage.addListener(function(request, sender)
{   /// here receive start countdown message from content.js and set alarm  ...
}

chrome.alarms.onAlarm.addListener(function(alarm) {
/// here i manage each alarm for each tab
});
chrome.tabs.onRemoved.addListener(function(tabid, removed) { 
//  ...
});
chrome.tabs.onUpdated.addListener(function
(tabId, changeInfo, tab) {
//
});

编辑:在浏览器中,它不起作用,我也可以阅读:

CORS 策略已阻止从源"https://mytargetsite.com"访问"https://mytargetsite.com/suburl/grid.php"处的 XMLHttpRequest(从"https://mytargetsite.com/suburl/grid.php"重定向(:对预检请求的响应未通过访问控制检查:预检请求不允许重定向。

  1. 声明的内容脚本是否运行的事实,应通过在 devtools => sources-subtab => 内容脚本子选项卡中进行检查来验证。如果它真的没有运行,可能只有两种解释:URL不同(例如不是https(或扩展名被其域管理员通过runtime_blocked_hosts阻止,您可以在chrome://policy中看到。

  2. 开发模式扩展的 ID 在不同的计算机上会有所不同,除非通过在 manifest.json 中添加"密钥"来固定它

  3. 若要使用chrome.runtime从网页代码(而不是内容脚本!(向扩展发送消息,扩展的清单应声明"externally_connectable",并在 MessageExternal 上使用不同的事件,另请参阅从网页发送消息。

  4. CORS 错误可能与代码无关(可以通过在 devtools 控制台中展开错误的调用堆栈来调查错误的来源(。

相关内容

最新更新