Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在除我之外的其他浏览器/计算机上运行我的chrome扩展:未打包的分发中存在某些不匹配?_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 无法在除我之外的其他浏览器/计算机上运行我的chrome扩展:未打包的分发中存在某些不匹配?

Javascript 无法在除我之外的其他浏览器/计算机上运行我的chrome扩展:未打包的分发中存在某些不匹配?,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,对不起,我的英语很差,希望你能理解这个问题 我是chrome扩展开发的新手,我的代码中肯定有很多 改变或优化的事物; 无论如何,我已经写了一个简单的代码,(似乎)至少可以从我的chrome上运行 代码在特定页面中每隔X分钟单击一个按钮,然后等待并在页面中解析结果 我已经: 一个内容脚本(从manifest.json加载),它在页面中“注入”一些按钮和文本输入框,所以用户可以在单击“开始按钮”之前设置一些“过滤器参数”;单击开始按钮,然后将sendMessage()发送到background.j

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

我是chrome扩展开发的新手,我的代码中肯定有很多 改变或优化的事物; 无论如何,我已经写了一个简单的代码,(似乎)至少可以从我的chrome上运行

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

我已经:

  • 一个内容脚本(从manifest.json加载),它在页面中“注入”一些按钮和文本输入框,所以用户可以在单击“开始按钮”之前设置一些“过滤器参数”;单击开始按钮,然后将sendMessage()发送到background.js,为单击设置报警事件

  • 一个eventPage(在实际中设置为persistent true),用于处理来自选项卡的请求并为每个选项卡设置倒计时报警;当X min被传递时,向感兴趣的选项卡发送一条消息

我也有一个popup.html e popup.js在这里并不重要(我想)

我必须手动分发这个扩展,所以我会分发一个用户可以用“开发者模式”加载的zip

*现在的问题是:为什么代码只在我的Chrome上工作*

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

但在网页中,contents.js似乎无法执行。

在我的chrome中工作得很好:我可以在控制台中看到一些初始输出(我打印了要检查的dir扩展名)和 页面中动态创建的元素(按钮、输入框等)

一切正常,我可以启动启动按钮并接收解析结果

在开发过程中,我从未在其他机器上运行过扩展。昨天我在2-3台笔记本电脑上测试成功。。然后我只做了很少的改变,但没什么大不了的

今天我只能在chrome上跑步

在其他pc中,无论是simple console.log还是输出脚本的第一行

我可以在控制台日志中读取: “未选中的运行时。lastError:无法建立连接。接收端不存在。” 但这也体现在我在笔记本电脑chrome上的工作距离上

zip文件是相同的,提取效果很好,事实上我可以加载扩展名,并且可以看到后台页面debug 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浏览器中

有专家能指出我要调查的方向吗

谢谢你的建议

My 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(已剥离):

My 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) {
               //
               });
编辑:在不起作用的浏览器中,我还可以阅读:

CORS策略已阻止从源“”访问位于“”的XMLHttpRequest(从“”重定向):对飞行前请求的响应未通过访问控制检查:飞行前请求不允许重定向

  • 应该通过在devtools=>sources子选项卡=>contentscripts子选项卡中检查来验证声明的内容脚本是否运行。如果它真的没有运行,可能只有两种解释:URL不同(例如不是
    https
    ),或者扩展被其域管理员通过运行时阻止的主机阻止,您可以在
    chrome://policy

  • 除非您在manifest.json中使用,否则在不同的计算机上,您的开发模式扩展的id将不同

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

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


  • 1-你说得对!我花了几个小时,然后发现302重定向url在加载时不匹配!所以这才是真正的问题。我抓住了这个机会:我有点困惑。。。添加密钥是否需要“手动”分发我的未打包扩展?(我的意思是,我会向用户发送一个zip文件,然后他们提取并加载..可以吗?或者我遗漏了什么?)
                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) {
                   //
                   });