js监控iframe中页面跳转,iframe中页面跳转后打印跳转链接的url

JavaScript022

js监控iframe中页面跳转,iframe中页面跳转后打印跳转链接的url,第1张

父页面访问iframe的内容,只能是同域,或同一主域,通过设置相同document.domain才能访问,否则,父页面没有权限访问iframe的内容。如满足上述条件,只需为iframe绑定onload事件,然后用document.getElementById('#iframeId').contentWindow.location.href来得到当前iframe中页面的url。

在iOS开发之Objective-C与JavaScript交互操作 中我们可以通过stringByEvaluatingJavaScriptFromString 去实现在obj-C中获取到相关节点属性,添加javascript代码等功能。但是我们如何监听到javascript的响应事件呢。在MAC OS中有效的API去实现,但iPhone没有,但我们有一个技巧途径:

大概思路是:在JavaScript事件响应时,通过设置document.location,这会引发webview的一个delegate方法,从而实现发送通知的效果,即达到监听的目的。

1、在javascript与webView之间定一个协议约定:

myapp:myfunction:myparam1:myparam2

2、在javascript中添加代码:

document.location = "myapp:" + "myfunction:" + param1 + ":" + param2

3、在webView的delegate方法webView:shouldStartLoadWithRequest:navigationType: 添加

- (BOOL)webView:(UIWebView *)webView2

shouldStartLoadWithRequest:(NSURLRequest *)request

navigationType:(UIWebViewNavigationType)navigationType {

NSString *requestString = [[request URL] absoluteString]

NSArray *components = [requestString componentsSeparatedByString:@":"]

if ([components count] >1 &&

[(NSString *)[components objectAtIndex:0] isEqualToString:@"myapp"]) {

if([(NSString *)[components objectAtIndex:1] isEqualToString:@"myfunction"])

{

NSLog([components objectAtIndex:2])// param1

NSLog([components objectAtIndex:3])// param2

// Call your method in Objective-C method using the above...

}

return NO

}

return YES// Return YES to make sure regular navigation works as expected.

}