モバイルSafariのようにwindow.open
などのJavascript呼び出しを傍受するにはどうすればよいですか?私はこれについて何かを見たことがないが、何とか可能でなければならないのだろうか?UIWebViewはJavaScriptの呼び出しに応答します
誰もこれまでに行ったことはありますか?
モバイルSafariのようにwindow.open
などのJavascript呼び出しを傍受するにはどうすればよいですか?私はこれについて何かを見たことがないが、何とか可能でなければならないのだろうか?UIWebViewはJavaScriptの呼び出しに応答します
誰もこれまでに行ったことはありますか?
ページが読み込まれたら(webViewDidFinishLoad :)、window.openのオーバーライドを挿入します。もちろん、ページロード時に呼び出されるwindow.openでは動作しません。 次に、カスタムスキームを使用して目的のCコードをコールバックします。
[編集] OK私はそれをテストしました。今それは動作します。
新しい「ビューベース」プロジェクトを作成し、IBを使用してビューコントローラxibにWebビューを追加します。
@implementation todel2ViewController
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
NSString* page = @"<html><head></head><body><div onclick='javascript:window.open(\"http://www.google.com\");'>this is a test<br/>dfsfsdfsdfsdfdsfs</div></body></html>";
[self.view loadHTMLString:page baseURL:[NSURL URLWithString:@""]];
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString* urlString = [[request URL ] absoluteString ];
NSLog(@"shouldStartLoadWithRequest navigationType=%d", navigationType);
NSLog(@"%@", urlString);
if ([[[request URL] scheme] isEqualToString:@"myappscheme"] == YES)
{
//do something
NSLog(@"it works");
}
return YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
//Override Window
NSString*override = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"NewWindow" ofType:@"js"] encoding:4 error:nil];
[self.view stringByEvaluatingJavaScriptFromString:override];
}
@end
Javascriptを:
var open_ = window.open;
window.open = function(url, name, properties)
{
var prefix = 'csmobile://';
var address = url;
open_(prefix + address);
return open_(url, name, properties);
};
ログのUIWebViewで
2011-07-05 14:17:04.383 todel2[31038:207] shouldStartLoadWithRequest navigationType=5
2011-07-05 14:17:04.383 todel2[31038:207] myappscheme:it%20works
2011-07-05 14:17:04.384 todel2[31038:207] it works
2011-07-05 14:17:04.386 todel2[31038:207] shouldStartLoadWithRequest navigationType=5
2011-07-05 14:17:04.386 todel2[31038:207] http://www.google.com/
この方法: - (NSStringの*)stringByEvaluatingJavaScriptFromString:(NSStringの*)スクリプト? – onnoweb
Err no?それがJavaScriptを注入しています。ウェブサイトがwindow.openを呼び出す場合、私はそれを傍受する必要があります。 – Pripyat