WoW:API Frame HookScript: Difference between revisions
No edit summary |
mNo edit summary |
||
Line 1: | Line 1: | ||
{{widgetmethod}}Sets a function to be called automatically after the original function is called, or "post hook". Works with secure frames. (secure) | {{widgetmethod}} | ||
Sets a function to be called automatically after the original function is called, or "post hook". Works with secure frames. (secure) | |||
frame:HookScript("handler", func) | frame:HookScript("handler", func) | ||
Revision as of 20:18, 30 January 2019
← Widget API ← Frame < HookScript
Sets a function to be called automatically after the original function is called, or "post hook". Works with secure frames. (secure)
frame:HookScript("handler", func)
Parameters
Arguments
- handler
- string - the name of the handler type, like 'OnShow', 'OnClick'. See Widget handlers.
- func
- function - function to be called. Cannot be 'nil'.
Summary
'HookScript' can be used on secure frames, where 'SetScript' would cause "taint" issues and bad UI behavior. Calls each hooked function after calling its original handler function. Any values returned by the hooking function will be discarded, and not be passed to the calling function (which is usually secure code). Any handler added this way cannot be removed, and will stay until the UI is reloaded.
Examples
local MyPartyFrame_OnClick = function( self, button ) print(self:GetName() .. " clicked with " .. button) end for i = 1, 4 do local frame = _G["PartyMemberFrame"..i] frame:HookScript("OnClick", MyPartyFrame_OnClick) end
Print notification in chat log when the player clicks a party member's portrait. 'HookScript' works while preserving the security of the unit frame after calling its original handler, where 'SetScript' in this case would not.
Notes
- Like any event handler, 'func' is called with arguments '(frame, arg1, arg2, ...)', 'event' being 'arg1' for OnEvent handlers.
- Just like hooksecurefunc("handler", func), this can be used on secure code.
- If the frame doesn't have a 'func' for 'handler', one will be created as if you called Frame:SetScript().
- Every script handler has at least one argument (the frame itself, usually self).
- See widget handlers for details on each handler.