1

我有問題找出我的代碼到底是什麼問題,因爲當我點擊圖標時,它說我運行background.js以及autofill.js。但是不會自動填充Gmail網站。這是我的第一個Chrome擴展以及使用JavaScript。我的最終目標是它可以自動填充所有站點(不僅僅是Gmail),並且能夠將所有密碼存儲/讀取到.txt文件中。另一件事是,當我嘗試運行此代碼是說,我的autofill.js文件有問題,並給我錯誤「未捕獲TypeError:無法設置null的屬性'值。這是爲autofill.js正確的下。評論//填寫用戶名和密碼 感謝你的時間來幫助我和任何的投入將幫助我,因爲我堅持撞牆了如何在我點擊圖標時創建自動填充用戶名/密碼的Google Chrome擴展程序?

manifest.json的:

{ 
    "name": "Test", 
    "manifest_version": 2,  
    "version": "1.0", 
    "description": "This is a Chrome extension that will autofill passwords", 
    "browser_action": { 
    "default_icon": "icon.png",  
    "default_popup":"popup.html", 
    "default_title": "PasswordFill" 
    }, 


//********************************************************************* 
//declaring the permissions that will be used in this extension 

"permissions": ["*://*.google.com/", "tabs", "activeTab", "*://*.yahoo.com/"], 

    "background": { 
    "scripts": ["background.js", "autofill.js"] 
    }, 


//********************************************************************* 
/* Content scripts are JavaScript files that run in the context of web pages. By using the standard Document Object Model (DOM), they can read details of the web pages the browser visits, or make changes to them */ 

"content_scripts": [ 
    { 

//Specifies which pages this content script will be injected into 
    "matches": ["https://accounts.google.com/ServiceLoginAuth"], 

//The list of JavaScript files to be injected into matching pages 
    "js": ["autofill.js"], //was background.js 

//Controls when the files at "js" are being injected 
    "run_at": "document_end", 

    "all_frames": true 
    } 
] 


} 

背景.js:

 console.log("Background.js Started .. "); //for debug purpose so i can see it in the console log 

    chrome.browserAction.onClicked.addListener(function (tab) { //Starts when User Clicks on ICON 



     chrome.tabs.executeScript(tab.id, {file: 'autofill.js'}); 

     console.log("Script Executed .. "); // Notification on Completion 
    }); 

autofi ll.js:

console.log("Autofill.js Started .. "); //for debug purpose so i can see it in the console log 

//define username and password 

var myUsername = 'McAfee.sdp'; 

var myPassword = 'baskin310'; 





//finds the fields in your login form 

var loginField = document.getElementById('Email'); 

var passwordField = document.getElementById('Passwd'); 





//fills in your username and password 

loginField.value = myUsername; 

passwordField.value = myPassword; 





//automatically submits the login form 

var loginForm = document.getElementById ('signIn'); 

loginForm.submit(); 

回答

0

您應該先花些時間閱讀開發guides。確保你瞭解debugging擴展的工作原理。另外,作爲一般規則,如果腳本在某些代碼行崩潰,執行將停止,並且該擴展很可能會在您希望執行的任何操作時失敗(取決於崩潰發生的位置) - 就像在其他應用程序。

"Uncaught TypeError: Cannot set property 'value' of null.

該錯誤告訴您,您正嘗試「訪問」(設置)「缺失」(空)對象的屬性。 loginField.value = myUsername;試圖訪問valueloginField,因此您可以輕鬆推斷出loginField爲空,這意味着var loginField = document.getElementById('Email');實際上不起作用。但不要拿我的話來說,學會自己調試它。

失敗的原因是一個不同的故事:擴展名是「沙盒」,不能亂跑,改變網頁內容時,他們覺得喜歡 - 你有說,「內容腳本」。回到文檔並閱讀overviewcontent scripts sections

在您的具體情況:

  • 唯一的背景腳本文件應該是background.js;刪除autofill.js
  • 儘可能利用事件頁面而不是後臺頁面
  • autofill.js是一個內容腳本,您將它添加到清單中。無需使用程序上的注射用chrome.tabs.executeScript
  • 學會研究背景/工具欄和內容腳本之間的溝通 - 你會需要它
  • 您的擴展需要的訪問權限`chrome.tabs *所以「標籤」添加到。您的擴展清單中的權限列表
相關問題