2016-04-25 33 views
1

我正在使用一個小型Greasemonkey腳本來加速用angularJS編寫的供應商工具中的一些進程。在Greasemonkey中修改Angular JS中的DOM元素

的問題,我似乎面臨的是,該元素是不是在DOM腳本運行時:

$(document).ready(function() { 
    var pwEl = $("input:password").val(chance.word({length: 8}); 
}; 

因爲輸入領域似乎並不存在時(文件)。就緒失敗( )運行。有幾個資源似乎證實了這一點。

有沒有一種方法可以在運行我的腳本之前等待Angular完成?我發現使用的參考:

angular.element(document).ready(function() { 
    console.log("Hi from angular element ready"); 
}); 

但是,這似乎從來沒有執行。

我是真的新來的角(我只玩過幾個簡短的教程)。任何方向表示讚賞。

謝謝!

+0

我認爲你正在尋找在這裏詳細說明的代碼。 [angular.js完成加載時發送事件](http://stackoverflow.com/questions/14968690/sending-event-when-angular-js-finished-loading) –

+0

沒有好的方法,我可以等待Angular完成'除了蹩腳'setTimeout(...,5000)',因爲Angular應用程序在特定時刻沒有完成加載。 input:password'元素出現的時刻取決於創建它們的指令是如何工作的。最好的方法是劫持Angular引導過程並裝飾應用程序服務。 – estus

回答

1

等待使用定時器實際添加元素,MutationObserver或像waitForKeyElements()這樣的實用程序。

這裏是展示一個方式完整的Greasemonkey腳本:

// ==UserScript== 
// @name  _Process nodes after Angular adds them 
// @match http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js 
// @require https://gist.github.com/BrockA/2625891/raw/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 
//- The @grant directive is needed to restore the proper sandbox. 

waitForKeyElements ("input:password", actOnNode); 

function actOnNode (jQueryNode) { 
    //--- Do whatever you need to on individual nodes here: 
    // For example: 
    jQueryNode.css ("background", "orange"); 
}