2015-06-21 59 views
0

有沒有辦法找出UIWebView內的內容何時更改標題?找出UIWebView標題何時更改?

例子:

我有一個UIWebView,並對其內容的變化,而經常通過JavaScript,所以我不能依靠webViewDidFinishLoading方法。標題更改時是否有方法可以調用特定的選擇器或函數?

更新:這是我目前的做法,它的工作原理,但似乎並沒有爲最優:

if(syncTitle){ 
    var updatePageTitleTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("syncPageTitle"), userInfo: nil, repeats: true); 
} 

回答

1

我無法測試下面的代碼,但它應該工作

第一你需要能夠聽取來自js的回調:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ 
    if([[[request URL] scheme] isEqualToString:@"titlechange"]) 
    { 
     //Title was changed... 
     return NO; //make sure the window location is not actually changed.. 
    } 
    return YES; 
} 

之後,你需要在你的web視圖上調用它。它爲您的文檔的title屬性創建一個更新偵聽器。

[YOUR_WEBVIEW stringByEvaluatingJavaScriptFromString:@"document.onpropertychange = function() {if (window.event.propertyName == 'title') {window.location = 'titlechanged://tralala';}};"]; 

UPDATE

[YOUR_WEBVIEW stringByEvaluatingJavaScriptFromString:@"var target = document.querySelector('head > title');var observer = new window.WebKitMutationObserver(function(mutations) {mutations.forEach(function(mutation) {  window.location = 'titlechanged://tralala';});});observer.observe(target, { subtree: true, characterData: true, childList: true });"]; 
+0

,我認爲這是唯一的清潔方式。 – Ryan

+0

document.onpropertychange函數似乎不會在iOS瀏覽器上調用。你有解決方法嗎? –

+0

我已更新一個新腳本。嘗試這個。 –