diff options
Diffstat (limited to 'CyteKit')
-rw-r--r-- | CyteKit/WebView.mm | 23 | ||||
-rw-r--r-- | CyteKit/dispatchEvent.h | 53 | ||||
-rw-r--r-- | CyteKit/dispatchEvent.mm | 76 |
3 files changed, 131 insertions, 21 deletions
diff --git a/CyteKit/WebView.mm b/CyteKit/WebView.mm index 3ec751a..dbd9129 100644 --- a/CyteKit/WebView.mm +++ b/CyteKit/WebView.mm @@ -37,8 +37,8 @@ */ /* }}} */ +#include "CyteKit/dispatchEvent.h" #include "CyteKit/WebView.h" -#include "CyteKit/WebThreadLocked.hpp" #include <CydiaSubstrate/CydiaSubstrate.h> @@ -329,26 +329,7 @@ static void $UIWebViewWebViewDelegate$webViewClose$(UIWebViewWebViewDelegate *se } - (void) dispatchEvent:(NSString *)event { - WebThreadLocked lock; - - NSString *script([NSString stringWithFormat:@ - "(function() {" - "var event = this.document.createEvent('Events');" - "event.initEvent('%@', false, false);" - "this.document.dispatchEvent(event);" - "})();" - , event]); - - NSMutableArray *frames([NSMutableArray arrayWithObjects: - [[[self _documentView] webView] mainFrame] - , nil]); - - while (WebFrame *frame = [frames lastObject]) { - WebScriptObject *object([frame windowObject]); - [object evaluateWebScript:script]; - [frames removeLastObject]; - [frames addObjectsFromArray:[frame childFrames]]; - } + [[self _documentView] dispatchEvent:event]; } - (void) reloadFromOrigin { diff --git a/CyteKit/dispatchEvent.h b/CyteKit/dispatchEvent.h new file mode 100644 index 0000000..a9e2c89 --- /dev/null +++ b/CyteKit/dispatchEvent.h @@ -0,0 +1,53 @@ +/* Cydia - iPhone UIKit Front-End for Debian APT + * Copyright (C) 2008-2011 Jay Freeman (saurik) +*/ + +/* Modified BSD License {{{ */ +/* + * Redistribution and use in source and binary + * forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the + * above copyright notice, this list of conditions + * and the following disclaimer. + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions + * and the following disclaimer in the documentation + * and/or other materials provided with the + * distribution. + * 3. The name of the author may not be used to endorse + * or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* }}} */ + +#ifndef CyteKit_dispatchEvent_H +#define CyteKit_dispatchEvent_H + +#include <UIKit/UIKit.h> + +#include "iPhonePrivate.h" + +@interface UIWebDocumentView (CyteDispatchEvent) + +- (void) dispatchEvent:(NSString *)event; + +@end + +#endif//CyteKit_dispatchEvent_H diff --git a/CyteKit/dispatchEvent.mm b/CyteKit/dispatchEvent.mm new file mode 100644 index 0000000..277d89b --- /dev/null +++ b/CyteKit/dispatchEvent.mm @@ -0,0 +1,76 @@ +/* Cydia - iPhone UIKit Front-End for Debian APT + * Copyright (C) 2008-2011 Jay Freeman (saurik) +*/ + +/* Modified BSD License {{{ */ +/* + * Redistribution and use in source and binary + * forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the + * above copyright notice, this list of conditions + * and the following disclaimer. + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions + * and the following disclaimer in the documentation + * and/or other materials provided with the + * distribution. + * 3. The name of the author may not be used to endorse + * or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* }}} */ + +#include "CyteKit/dispatchEvent.h" +#include "CyteKit/WebThreadLocked.hpp" + +#include <WebKit/WebFrame.h> +#include <WebKit/WebScriptObject.h> +#include <WebKit/WebView.h> + +#include <objc/runtime.h> + +#include <CydiaSubstrate/CydiaSubstrate.h> + +@implementation UIWebDocumentView (CyteDispatchEvent) + +- (void) dispatchEvent:(NSString *)event { + WebThreadLocked lock; + + NSString *script([NSString stringWithFormat:@ + "(function() {" + "var event = this.document.createEvent('Events');" + "event.initEvent('%@', false, false);" + "this.document.dispatchEvent(event);" + "})();" + , event]); + + NSMutableArray *frames([NSMutableArray arrayWithObjects: + [[self webView] mainFrame] + , nil]); + + while (WebFrame *frame = [frames lastObject]) { + WebScriptObject *object([frame windowObject]); + [object evaluateWebScript:script]; + [frames removeLastObject]; + [frames addObjectsFromArray:[frame childFrames]]; + } +} + +@end |