6

TWebBrowser で Google マップにピンを追加し、ピンがクリックされたときにイベントを呼び出すにはどうすればよいですか? このソリューションは、iOS と Android の両方で動作する必要があります。

4

1 に答える 1

0

ネイティブ (iOS/Android) と GoogleMaps の JavaScript コードの間を橋渡しする必要があります。たとえば、マップにピンをドロップするには、js 側で addPin メソッドを呼び出す js コードを挿入する必要があります。

iOS では、stringByEvaluatingJavaScriptFromString という Web ビュー メソッドを呼び出すことによって実行されます。

[webview stringByEvaluatingJavaScriptFromString:@"addPin()"];

また、webview でタップ イベントをリッスンするには、ピンがタップされたときにコールバックを実装し、iFrame アプローチを使用して objC メソッドを呼び出す必要があります。

var iframe = document.createElement("IFRAME");
iframe.setAttribute("src", "js-frame:myPinTappedMethod";
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;

これにより、Web ビューの shouldStartLoadWithRequest: デリゲートがネイティブ側でトリガーされるため、必要なことはリクエストを読み取って処理することだけです ...

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{

  // Intercept custom location change, URL begins with "js-call:"
  if ([[[request URL] absoluteString] hasPrefix:@"js-call:"]) {

    // Extract the selector name from the URL
    NSArray *components = [requestString componentsSeparatedByString:@":"];
    NSString * functionName = [components objectAtIndex:1];

    // Call the given selector
    [self performSelector:NSSelectorFromString(functionName)];

    // Cancel the location change
    return NO;
  }

  // Accept this location change
  return YES;

}

この例の一部はhereから取得します

それが役に立てば幸い!

于 2014-11-07T08:51:28.280 に答える