无法在除我之外的其他浏览器/机器上运行我的 chrome 扩展:未打包的发行版中有些不匹配?
Posted
技术标签:
【中文标题】无法在除我之外的其他浏览器/机器上运行我的 chrome 扩展:未打包的发行版中有些不匹配?【英文标题】:Cannot run my chrome extension in other broswer/machine except mine : some mismatch in unpacked distribution? 【发布时间】:2019-12-16 21:16:27 【问题描述】:对不起,我的英语不好,我希望你能理解这个问题。
我是 chrome 扩展开发的新手,在我的代码中肯定有很多 改变或优化的东西; 无论如何,我已经编写了一个简单的代码,(似乎)至少可以从我的 chrome 中工作。
代码在特定页面中每 X 分钟点击一次按钮,然后等待并解析页面中的结果。
我已经:
一个内容脚本(从 manifest.json 加载),它在页面中“注入”一些按钮和文本输入框,因此用户可以在单击“开始按钮”之前设置一些“过滤参数”;开始按钮然后 sendMessage() 到 background.js 为点击设置警报事件;
一个事件页面(实际上设置为持久真),它处理来自标签的请求并为每个标签设置倒计时警报;当 X min 被传递时,会向感兴趣的选项卡发送一条消息;
我还有一个 popup.html e popup.js 在这里并不重要(我认为)。
我必须手动分发这个扩展,所以我会分发一个用户可以使用“开发者模式”加载的 zip。
*现在的问题是:为什么代码只能在我的 Chrome 上运行? *
我用 Chrome 和其他 2-3 台笔记本电脑测试过,后台脚本已加载(我可以看到后台页面 printint 控制台日志)
但在网页中,contents.js 似乎无法执行。
在我的 chrome 中运行良好:我可以在控制台中看到一些初始输出(我打印要检查的 dir 扩展名)和 页面中动态创建的元素(按钮、输入框等)。
一切正常,我可以触发开始按钮并接收解析结果。
在开发过程中,我从未在其他机器上运行过扩展。昨天我已经成功地在 2-3 台笔记本电脑上进行了测试。然后我只做了很少的改变,但没有什么严重的。
今天我只能在我的 chrome 中运行。
在其他电脑上什么都没有,简单的console.log也不输出第一行脚本。
我可以在控制台日志中阅读: “未经检查的 runtime.lastError:无法建立连接。接收端不存在。” 但这也是我在笔记本电脑 chrome 上工作时的情况。
zip文件一样,解压好,其实我可以加载扩展,看到后台页面调试console.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 浏览器中工作...
专家能否指出我要调查的方向?
非常感谢您的任何建议。
我的 Manifest.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
);
我的 eventPage.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)
//
);
编辑:在它不起作用的浏览器中我也可以阅读:
从源“https://mytargetsite.com”访问“https://mytargetsite.com/suburl/grid.php”处的 XMLHttpRequest(从“https://mytargetsite.com/suburl/grid.php”重定向)已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:重定向未通过允许预检请求。
【问题讨论】:
【参考方案1】:声明的内容脚本是否运行,应通过在 devtools => 源子选项卡 => 内容脚本子子选项卡中检查来验证。如果它真的没有运行,可能只有两种解释:URL 不同(例如不是https
)或扩展被其域管理员通过 runtime_blocked_hosts 阻止,您可以在 chrome://policy
中看到。
除非您在 manifest.json 中 pin it by adding a "key",否则您的开发模式扩展程序的 id 在不同的机器上会有所不同
1234563CORS 错误可能与您的代码无关(您可以通过在 devtools 控制台中展开错误的调用堆栈来调查错误的来源)。
【讨论】:
1- 你是对的!我花了几个小时然后发现 302 重定向 url 在加载时出现了一些不匹配!所以这是真正的问题。 2-我抓住了这一刻:我有点困惑......添加密钥是严格需要“手动”分发我的解压扩展程序? (我的意思是,我会向用户发送一个 zip 文件;然后他们提取并加载.. 可以吗?还是我遗漏了什么?)以上是关于无法在除我之外的其他浏览器/机器上运行我的 chrome 扩展:未打包的发行版中有些不匹配?的主要内容,如果未能解决你的问题,请参考以下文章
HTML5 视频播放器在除 Safari 之外的所有浏览器中都没有声音
在日历中的特定日期显示背景颜色的问题,在除移动 Safari 之外的所有浏览器上都可以正常工作
如何在除 Localhost 之外的特定 IP 上运行 Geoserver?