2012-07-23 33 views
0

假設我有一個Mac OS X應用程序,它鏈接到WebKit並使用WebView來顯示Web內容。OS X上的WebKit:如何在WebView中檢測到對pushState()的JS調用?

如果此web視圖中的JavaScript調用window.history.pushState()方法,如何在Objective-C中檢測到這一點?

理想情況下,我正在尋找類似於ObjC委託回調的通知我的應用程序的東西:「pushState()」使用這些參數調用:XXX「。


:我期待在ObjC的解決方案。假設我不能接受頁面上的JS,並替換/調整JS中的pushState()方法。

+1

就這樣,我明白了,是否可以接受來自* ObjC *的pushState方法?在這種情況下,您可以使用WebView API在ObjC中提供您自己的自定義pushState。 – 2012-07-23 19:45:35

+0

我會說這是不可接受的。由於這是'window.history'方法,這意味着我將不得不顯着改變WebKit內部。我的應用只鏈接到WebKit。在這種情況下,單獨爲此功能綁定WebKit的自定義版本是不可接受的。 – 2012-07-23 19:48:08

+0

另外,我想我可以提供一個'window.history'的替代實現,而不需要在我的應用中綁定一個自定義的WebKit。但是,再次假設這是不可接受的,因爲這是一個糟糕的主意/不值得爲此功能付出努力。 – 2012-07-23 19:49:44

回答

2

我在WebKit源代碼樹中發現了這些私有API。這正是我所尋找的,除了它們是私人的,這可能會給我的特殊用例帶來問題。

@interface NSObject (WebFrameLoadDelegatePrivate) 
... 
- (void)webView:(WebView *)wv didPushStateWithinPageForFrame:(WebFrame *)frame ; 
- (void)webView:(WebView *)wv didReplaceStateWithinPageForFrame:(WebFrame *)frame; 
- (void)webView:(WebView *)wv didPopStateWithinPageForFrame:(WebFrame *)frame; 
@end 
+1

一般來說,Apple似乎忽略了WebKit中私有API的使用,至少在我的經驗中。也許是因爲來源是開放的? – 2012-07-23 22:09:40

相關問題