2

我目前正在开发一个应用程序,该应用程序在 iOS 和 Android 上积极使用 webviews 来呈现内容,并使用原生 chrome 围绕它。我希望能够通过 javascript 方法控制这个 chrome。

Android Webview 具有允许这种情况发生的addJavascriptInterface,但 iOS 没有此功能。我已经在iOS JavaScript bridge上查看了 SO 答案,这有一些有用的信息,但它仅适用于 iOS;最佳情况下,相同的底层 Web 代码可以为 Andorid 和 iOS 设备上的回调提供动力。

我想知道 PhoneGap 或 Appcelerator 之类的东西是否提供了一种简单的方法;但是我不需要他们的核心产品(通过底层的 html/css/js 提供原生体验),我什至不知道我需要的东西是否包含在他们的包中。

感谢您提供任何信息!

4

3 回答 3

1

我想说最好的方法是自己做,结合这两个例子:

function nativeDoStuff() {
  if (androidbridge != null {
    androidbridge.doStuff();
  }
  else {
    //construct url
    window.location = "myiphonescheme://dostuff";
  }

想一想,如果你有雄心壮志,你可以编写一个快速的 javascript 对象来为你做这件事:

function NativeAppBridge () {
  function runMethod(methodName, params) {
    if (androidbridge != null {
      // If the android bridge and the method you're trying to call exists,
      // we'll just call the method directly:
      if (androidbridge[methodName] != null) {
        androidbridge[methodName].apply(this, params);
      }
    }
    else {
      // building the url is more complicated; best I can think
      // of is something like this:
      var url = "myiphonescheme://" + methodName;
      if (params.length > 0) {
        url += "?"
        var i = 0;
        for (param in params) {
          url += "param" + i + "=" + param;
          ++i;
          if (i < params.length) {
            url += "&";
          } 
        }
      }
    }
  }
}

使用它就像这样简单:

var bridge = new NativeAppBridge();

function onClick() {
  bridge.runMethod("doStuff", null);
}

请注意,我在脑海中编写了这个代码,目前没有时间进行测试 - 但我认为它应该足够好,前提是我没有犯任何重大错误

于 2012-10-29T21:41:36.233 回答
1

如果你打算使用 WKWebView可以试试XWebView项目

于 2015-04-28T15:01:07.353 回答
0

您可以使用 phonegap 插件来做到这一点。它们提供了一种在 webview 和您的本地层之间进行通信的绝佳方式。

在这里你可以看到如何创建一个!

以及我对这个主题的个人看法:我使用 phonegap 已经有一段时间了,如果你在 webviews 上,我强烈建议你重新考虑你做事的方式并转向移动网络平台。您可能可以节省很多时间。

在我看来,使用它的最大缺点是您正在创建一个网页而不是移动应用程序。您不能使用本机组件,并且您的应用程序的响应速度会降低。由于您已经在 webviews 上,我相信您只能在这些平台上找到好处。

于 2012-10-29T20:20:09.757 回答