(chrome 扩展)javascript的异步嵌套函数调用, 请教前辈!!!! 50C

背景:
小弟开发了一个在content Script 和 Background Page 之间不断互相嵌套调用的Chrome Extension
在进行了2次嵌套调用后出错。 而我根本无法知道为何里面的代码不执行。


出错的地方:
background.js 的第九行;

前辈们帮忙啊!!!

所有代码如下(option page是空的, 我就没放上来):

<manifest.js>
{
  "manifest_version": 2,

  "name": "Getting started example",
  "description": "This extension shows a Google Image search result for the current page",
  "version": "1.0",
  "options_page": "options.html",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "permissions": [
    "activeTab",
    "storage",
    "tabs",
    "*://*/*",
    "background"
  ],
  "content_scripts": [
  {
  "matches": ["*://*/*"],
  "js": ["content.js"],
  "run_at": "document_start"
  }
  ],
  "background": {
    "scripts": ["background.js"]
  }
}


<popup.js>
 function start_action() {
    var bloggerID = document.getElementById('bloggerID').value;
    var handleQty = document.getElementById('handleQty').value;


    var bkg = chrome.extension.getBackgroundPage();
    bkg.doSomeThing(function(result) {
    alert( result );
    });

}


function restore_options() {

}
document.addEventListener('DOMContentLoaded', restore_options);
document.getElementById('start').addEventListener('click',
    start_action);
 <content.js>


chrome.extension.onRequest.addListener(
    function (request, sender, sendResponse) {

        if (request.action == "findCandidates") {

            var oCandidateList = candidateList();

            var nameList = new Array();
            for (i = 0;i < oCandidateList.length; i++) {
                nameList[i] = oCandidateList[i].innerHTML;
            }

            sendResponse( nameList );

        }
    }
); 

chrome.extension.onRequest.addListener(
    function (request, sender, sendResponse) {

        if (request.action == "openCandidatePage") {

            var oCandidateList = candidateList();
            for (i = 0;i < oCandidateList.length; i++) {
                if ( oCandidateList[i].innerHTML == request.candidateName ) {
                    oCandidateList[i].click();
                    break;
                }
            }

            sendResponse();

        }
    }
); 

chrome.extension.onRequest.addListener(
    function (request, sender, sendResponse) {

        if (request.action == "doFinalJobs") {

            alert("do the final jobs");
        }
    }
); 


function candidateList() {
     var oTags = document.getElementsByTagName("a");
     var oResultTags = new Array;
     for (i=0; i<oTags.length; i++){
            if ( oTags[i].hasAttribute("usercard") && oTags[i].hasAttribute("node-type") )  {
                oResultTags[oResultTags.length] = oTags[i];
            }
         }

    return oResultTags;
    }

 <background.js>
   function doSomeThing (callback) {

        chrome.tabs.getSelected(null, function (fatherTab) {

            chrome.tabs.sendRequest(fatherTab.id, { action: "findCandidates" }, function (candidates) {

                for (i = 0;i < 1; i++) {
                    chrome.tabs.sendRequest( fatherTab.id, { action: "openCandidatePage", candidateName: candidates[i] }, function(doNothing) {
                        callback("WHY HERE GOSE NO RESPOND"); // 就是这里开始任何代码都不执行 , 也不报错。 之前的所有功能都正常。
                    });
                }


            });

        });
  }

2个回答

漏了一个文件popup.html, 除了这些其他的文件都没用的可以在manifest中去掉。

 <!DOCTYPE html>
<html>
<head><title>My Test Extension Options</title></head>
<body>

<label>
    enter bloggerID
    <input type="text" value="" id="bloggerID"/>
    enter handleQty
    <input type="text" value="" id="handleQty"/>
</label>

<div id="status"></div>
<button id="start">Start</button>

<script src="popup.js"></script>
</body>
</html>
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

如何在网页中调用Chrome扩展程序

自己写了一个前端系统,在离线情况下, 有办法通过网页上的js调用Chrome的扩展程序吗?

Chrome扩展点击事件不执行

chrome扩展,在popup页面,给页面对象添加的onclick事件不执行。 ``` <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>chrome扩展测试</title></head> <body> <a onclick="alert('hello world!')">hello</a></body></html>

chrome插件中回调函数与call的用法

如下是一个下载页面内所有图片的chrome扩展代码,其中的 [].map.call是什么意思,background中的results与url参数的数据又是哪里来的? background.js: ``` chrome.runtime.onInstalled.addListener(function(){ chrome.contextMenus.create({ 'id':'saveall', 'type':'normal', 'title':'save all picture', }); }); chrome.contextMenus.onClicked.addListener(function(info, tab){ if(info.menuItemId == 'saveall'){ chrome.tabs.executeScript(tab.id, {file: 'main.js'}, function(results){ if (results && results[0] && results[0].length){ results[0].forEach(function(url) { chrome.downloads.download({ url: url, conflictAction: 'uniquify', saveAs: false }); }); } }); } }); ``` main.js: ``` [].map.call(document.getElementsByTagName('img'), function(img){ return img.src; }); ```

chrome扩展开发其他地方调用sendmessage里的response

var sysconfig={}; ``` chrome.runtime.sendMessage({type : 'getload'}, function(response){ sysconfig=response.configs; console.log(sysconfig);//可以打印出来 }); ``` console.log(system);///打印为空对象 background.js里是 ``` case 'getload': sendResponse({configs:main.config}); break; ``` 为什么在sendMessage外获取不到数据啊

修改chrome 扩展ID 修改chrome 扩展ID

修改chrome 扩展ID this.loadingImg="chrome-extension://pcbkaponcbg/img/loading1.gif"; 改完后ID仍是ID: hjiebjanphijpacjiimolpcbkaponcbg

python与selenium使用chrome浏览器 在函数内调用该函数,执行完成后浏览器会自动关闭

1.使用线性脚本执行没有任何问题 2.将同样的代码写在方法内,调用该方法,程序执行完成后浏览器会自动关闭 from selenium import webdriver ``` dr = webdriver.Chrome() dr.get("https://www.baidu.com/") dr.find_element_by_id('kw').click() dr.find_element_by_id('kw').clear() dr.find_element_by_id('kw').send_keys('刘德华') dr.find_element_by_id('su').click() ``` ``` def get(): dr = webdriver.Chrome() dr.get("https://www.baidu.com/") dr.find_element_by_id('kw').click() dr.find_element_by_id('kw').clear() dr.find_element_by_id('kw').send_keys('刘德华') dr.find_element_by_id('su').click() get() ``` Chrome版本:70.0.3538.67 对应webdriver驱动版本也是70.0.3538.67

chrome扩展如何模拟点击特定网页中的超链接?

楼主想利用chrome插件来自动点击某网页XXX.html中的连接,其中的连接形式如下: ``` <a class="item" href="/pageContent.htm"><img src="pic.jpg" title="全国地图" alt="全国地图" class=""></a> ``` 楼主自己写了个插件小demo,但是跑不成功,具体manifest.json文件如下所示: ``` "browser_action": { "default_icon": "icon/wuzang.png", "default_popup": "popup.html" }, "permissions": [ "tabs", "http://*/*","https://*/*" ], "content_scripts": [ { "js": [ "jquery-1.7.2.min.js", "contentJs.js" ], "matches": [ "http://XXX.html] } ], "default_locale": "en", "description": "demo", "manifest_version": 2, "name": "demo", "version": "0.10" ``` ContentJs文件如下所示: ``` function toMap(){ console.debug("toMap") //选中该连接的url mapHref = $("#a").attr("href") alert(mapHref) if(mapHref == undefined) return; else goToLink(mapHref) } function goToLink(href){ location.href = href; return; } function toMap2(){ console.debug("toMap") map = $("a"); map.click(); } setInterval(toMap2(),5000) setInterval(toMap(),5000) ``` 这样写完了之后,页面只在刷新重新加载的时候弹出了tomap()方法中的alert提示框,显示undefined,请问有大神知道为什么这样做行不通吗

Chrome扩展 content.js注入iframe后消息响应不能正常运行的问题

在开发Chrome扩展的过程中遇到要修改非自己的iframe中网页内容的问题 在向原网页中注入content.js时,用的是chrome.tabs.executeScript() 其中的allFrames参数设置为true,成功把content.js注入到原网页(iframe外的网页)和iframe里 但是二者在background.js发出消息的时候不能做到都响应 经过调试猜测是只有其中其中一个content.js的事件监听做出响应 想请教有没有能让二者都做出响应的方法

如何把 chrome.tabs.getSelected 变成同步函数

如何把 chrome.tabs.getSelected 变成同步函数 1C chromechrome extension 高手们, 你们知道chrome.tabs.getSelected是一个异步函数, 我需要用callback。 但想象下面这个情况: 假设我得到了这个Tab后, 需要有1万行的语句进行处理。 我绝无道理把这1万行都写到callback里面。 例子: ``` var targetTab; chrome.tabs.getSelected(null, function (tab) { targetTab = tab; // 位置<a1> }); int kkk = 1; int kkk = 2; // 需要对 targetTab 进行的处理, 这里假设有1万行, 还有各种消息和异步函数的调用。 // 我没理由把这所有的代码放到位置<a1> // 但是如果不放在位置<a1>, 就会出错 ``` 请教各位应该怎么办?

Chrome扩展中的onclick不执行

chrome扩展,在popup页面,给页面对象添加的onclick事件不执行。 ``` <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>chrome扩展测试</title></head> <body> <a onclick="alert('hello world!')">hello</a></body></html> ```

开发Chrome扩展并实现实时扒取web数据并存储至本地

想要开发一个Chrome扩展,实现实时(随着用户的点击行为)扒取web数据(用户浏览的网页的文本信息)并存储至本地。 最初想直接读取用户浏览的历史记录然后用python来爬数据,但是这样面临隐私问题,所以还是能实时扒取比较好。 请问有什么好的实现方式?

chrome调用ocx浏览器都不支持

现在浏览器都不支持chrome调用ocx、各位大神有没有其他比较好的方法代替?

从Contentscript.js插入代码(Chrome扩展程序)

<div class="post-text" itemprop="text"> <p>I am Developing the Politics &amp; Information Google Chrome Extension but I have run into a problem, I am attempting to insert a JS Script into one of the div's of the Webpage, the result is nothing, absolutely nothing pops up</p> <p>I know i have the right area because if I use += "Hello"; it displays the text there properly, but when I actually do +="" the script doesn't seem to run. To all them devs out there, any suggestions?</p> <p>How I am doing it:</p> <p>theinfotable.children[0].innerHTML += ''; JavaScript (Google Chrome Extension inserted from the Contentscripts.js file)</p> <p>I can see that the Code Inserted, but the script still doesn't seem to load: (And I know this code works when I have my own page instead of inserting) <a href="http://oi61.tinypic.com/2irkx9c.jpg" rel="nofollow">http://oi61.tinypic.com/2irkx9c.jpg</a></p> </div>

chrome扩展开发时,可不可以使用jquery?如果可以怎么在js引用?

本人想学习chrome应用开发, 可以遇到了一些小的问题,相比于js,我更熟悉jquery, 所以, 想问下可不可以引用jquery包。可以的话,应该怎么引用, 求代码!!!!

chrome扩展怎么在content_scripts中加载CDN上的JS文件。不是通过mainfest引入

我的项目chrome扩展里面需要用到layui,下载到扩展里面再引用路径老是不对,里面model路径是以web的URL为路径而不是以extension为路径。所以老是报错。content_scripts跟页面的JS是两个不同的执行环境。所以如果在content_scripts里面创建script标签引用再addpend到head里面是无效的。如果想在线下加载该怎么做呢?

chrome的扩展如何在代码里自动安装,急急急!!! js或c++

chrome的扩展如何在代码里自动安装,急急急!!! js或c++

关于Chrome扩展开发的问题

用python做了一个功能,本来想做成一个web应用,但是因为只能基于chrome浏览器用户测试,所以想尝试用一个chrome扩展来实现,有几个模糊的问题求教一下。 1. 扩展开发和web开发相比,它的数据库和服务器在哪里?是整个都放在Google服务器上面,自己只需要编写功能就可以了吗? 2. 是否可以像应用一样实现用户注册、登陆功能,并存储用户的数据? 3. 有机器学习的包被调用,这样的代码是否能够在扩展的后台运行? 求教!问题可能有些蠢。

如何在所有ajax调用之后调用javascript函数?

<div class="post-text" itemprop="text"> <p>我想在所有ajax调用之后调用一些javascript函数。 <p>当然,我知道如何在每个单独的ajax调用中调用函数: <pre><code>function xyz() { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 &amp;&amp; xmlhttp.status==200) { document.getElementById("links").innerHTML=xmlhttp.responseText; *****javacsript would go here***** } xmlhttp.open("GET","xhr_php/site_links.php",true); xmlhttp.send(); } } </code></pre> <p>同样,我知道如何在每个ajax调用之后或内部调用它,但是我想知道是否有一个函数会在所有ajax调用之后调用这些函数。这样的话,我就不必在每个Ajax调用中编写javascript。 <p>我认为这与endrequesthandler有关,但不确定如何用php / javascript编写。 我在网上发现了一些东西,但它们都与asp.net有关,而我使用的是php。 <p>此外我也想找一个在ajax调用开始时或ajax调用之前调用函数的方法。通过这种方式,我可以在ajax调用期间启动和停止,而不必在每次调用中都编写该函数。 <p>谢谢帮助! </div>

如何在chrome扩展中执行PHP?

<div class="post-text" itemprop="text"> <p>Hi I am trying to execute some php code in an extension so that it displays what you type into a form but when I run the extension it just displays the php file.</p> <p>I've already tried executing the extension on "localhost/xampp" but I get the same results.</p> <p>Popup.html:</p> <pre><code>&lt;form action="test.php" method="post"&gt; &lt;input name="object" type="text"&gt; &lt;input type="submit"&gt; &lt;/form&gt; </code></pre> <p>test.php:</p> <pre><code>&lt;body&gt; &lt;?php echo $_POST["object"]; ?&gt; &lt;/body&gt; </code></pre> <p>I expect it to return what I type into the form but it displays the actual file.</p> </div>

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c#跨线程停止timer c#批量写入sql数据库 c# 自动安装浏览器 c#语言基础考试题 c# 偏移量打印是什么 c# 绘制曲线图 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行
立即提问