为什么我的背景页面不可用?

时间:2017-05-24 20:56:33

标签: google-chrome-extension google-chrome-devtools

我有一个长期运行的Chrome扩展程序,我以前总是可以访问background.js页面来查看控制台,解决问题等。

我正在实施Firebase登录并进行了一些更改......现在,在我登录我的应用后,'后台页面'成为当前弹出窗口的html。

下面的宣言......

当您重新加载或首次安装扩展程序时,我会看到我过去常常...并且可以点击该链接查看" _generated_background_page.html"。弹出窗口中的按钮正确地(通过消息传递)通信以在background.js中运行函数。

enter image description here

但是,登录后,新弹出窗口(我重定向到登录用户的新弹出窗口)会替换背景页面(我的话)和(最重要的是)我无法访问后台页面。消息没有任何效果,我不能看到"控制台/检查background.js页面。

enter image description here

在过去,我看过一个背景页和另一个打开的页面,可以检查它们。

有关我如何成功将自己画成角落的任何想法?好像我关闭了background.js文件。

清单:

{

"manifest_version": 2,

"name": "Annotate PRO for Chrome",
"short_name": "Annotate PRO",
"description": "Right-click access to a pre-written library of comments. Write it once, to perfection, and reuse forever!",
"version": "3.1.1.0",

"permissions": [
    "identity",
    "identity.email",
    "clipboardWrite",
    "clipboardRead",
    "activeTab",
    "tabs",
    "contextMenus",
    "storage",
    "webNavigation"
],

"content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'",

"externally_connectable": {
    "matches": ["http://*.11trees.com/*"]},

    "commands": {
      "_execute_browser_action": {
        "suggested_key": {
          "windows": "Alt+A",
          "mac": "Alt+A",
          "chromeos": "Alt+A",
          "linux": "Alt+A"
        }
      }
    },

"key": "XXX",

"oauth2": {
    /*"client_id": "XXX",*/
        "client_id": "XXX",
        "scopes": [
      /*"https://www.googleapis.com/auth/chromewebstore.readonly",*/
            "https://www.googleapis.com/auth/userinfo.email",
        "https://www.googleapis.com/auth/userinfo.profile"
      ]
  },

"background": {
    "scripts": ["/dscripts/jquery-3.1.1.min.js","/dscripts/firebase.js","/scripts/background.js"]},


"content_security_policy": "script-src 'self' https://ssl.google-analytics.com https://apis.google.com/ https://www.gstatic.com/ https://*.firebaseio.com https://www.googleapis.com; object-src 'self'",

"content_scripts": [
    {
    "all_frames" : true,
    "matches": ["http://*/*","https://*/*"],
    "js": ["/scripts/content.js"]
    }
],

 "icons": {
          "16": "Annotate16.png",
          "48": "Annotate48.png",
          "128": "Annotate128.png"
        },

"browser_action": {
    "default_icon": {
        "19": "Annotate128.png",
        "38": "Annotate128.png"
    },
    "default_title": "Annotate PRO for Google Chrome",
    "default_popup": "aHome.html"
}

}

background.js

//URLs for scripts
var baseURL = "http://localhost/AnnotateX/Scripts/Dev/";    //local server - macOS


var xmlhttp = new XMLHttpRequest();             //why put this up front? We need a new object on each call...

//Firebase constants
var config = {
  apiKey: "XXX",
  authDomain: "XXX",
  databaseURL: "XXX",
  storageBucket: "XXX",
  // messagingSenderId: "XXX"
};

firebase.initializeApp(config);

//listener for chrome start
chrome.runtime.onStartup.addListener(initApp());    //This fires verification check...

function initApp() {
  // Listen for auth state changes.
   // [START authstatelistener]
   firebase.auth().onAuthStateChanged(function(user) {
     if (user) {
       // User is signed in.
       var displayName = user.displayName;
       var email = user.email;
       var emailVerified = user.emailVerified;
      //  var photoURL = user.photoURL;
      //  var isAnonymous = user.isAnonymous;
       var uid = user.uid;
       var providerData = user.providerData;
       console.log('We\'re a user...coming through: ' + providerData);

       if (user.emailVerified) {   //Account is verified
         console.log('We\'re a VERIFIED user... ' + emailVerified);
         var url1 = baseURL + "aCheckUsers.php"
         var url2 = "&fbUserID=" + uid + "&UserEmail=" + email + "&fullName=" + displayName;

         $.ajax({
           type: "POST",
           url: url1,
           data: url2,
           dataType: 'json',
           success: function(arrResult){
             arrUserData = arrResult;
             console.log('User data: ') + console.log(arrUserData);
             localStorage.userDetails = JSON.stringify(arrUserData);
             localStorage.userID = arrUserData.userID;
             localStorage.licType = arrUserData.LicType;
             startup();
           },
           error: function (jqXHR, textStatus, errorThrown) {
             console.log('Error: ' + errorThrown + ' / ' + textStatus) + console.log(jqXHR);

           }
           });


       }
       // [START_EXCLUDE]

       // [END_EXCLUDE]
     } else {
       // Let's try to get a Google auth token programmatically.
       // [START_EXCLUDE]
       console.log('Not a user (background.js)');
       // [END_EXCLUDE]
     }
   });
}



function signOut() {
  console.log("Logging out via subroutine in background.js.");
   firebase.auth().signOut();
   chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
     chrome.tabs.sendMessage(tabs[0].id, {method: "logOut"});
    });
   chrome.browserAction.setPopup({   //Sets popup to last visited
     popup: 'aHome.html'   // Open this html file within the popup.
   });
}



//function that determines whether userID exists and library can be loaded or if new user must be created first
function startup(){
  console.log("Starting up...");

  chrome.storage.sync.get('lastSave', function(obj) {
    var syncSaveTime = obj.lastSave;
    var localSaveTime = localStorage.lastSync;

    console.log('local: ' + localSaveTime + ' | sync: ' + syncSaveTime);

    // if (localSaveTime == null || syncSaveTime >= localSaveTime){        //test
    if (localSaveTime == null || syncSaveTime > localSaveTime){      //production
      // console.log("Current user: " + localStorage.userID);

      console.log("Local version is outdated...should run db pulll...");
      pullLibrary();
      }       //End process for running library load if outdated or NO data locally...
      else {
        console.log("We've got data - skip the heavyweight pull....use local");
        processLibrary(JSON.parse(localStorage.library));
        }

  });     //End async storage GET

}   //End STARTUP


// Firebase auth popups
function googleLoginPopUp() {
  var provider = new firebase.auth.GoogleAuthProvider();
  firebase.auth().signInWithPopup(provider).then(function(result) {
    // This gives you a Google Access Token. You can use it to access the Google API.
    var token = result.credential.accessToken;
    // The signed-in user info.
    var user = result.user;
    // ...
  }).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // The email of the user's account used.
    console.log(errorCode + ' - ' + errorMessage);
    // ...
  });
 }   //End Google Login

function facebookLoginPopUp() {
  var provider = new firebase.auth.FacebookAuthProvider();
  firebase.auth().signInWithPopup(provider).then(function(result) {
    // This gives you a Facebook Access Token. You can use it to access the Facebook API.
    var token = result.credential.accessToken;
    // The signed-in user info.
    var user = result.user;
    // ...
  }).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    console.log(errorCode + ' - ' + errorMessage);
  });
}

1 个答案:

答案 0 :(得分:0)

好的......晚安睡觉和一些基本的调试......

我的background.js启动过程的一部分是将用户交给登录后的弹出页面。

self.location.href='aSearch.html';   //finally open core search page

我不明白为什么,但是background.js中的这一行有效地用aSearch.html和aSearch.js页面替换了background.js ... background.js变得无法用于消息传递等。

删除该线就行了......但无论如何你都无法从background.js打开一个页面。