druidAAAA2000 2016-06-02 10:50 采纳率: 50%
浏览 1859
已结题

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

背景:
小弟开发了一个在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条回答

  • druidAAAA2000 2016-06-02 11:03
    关注

    漏了一个文件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>
    
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)