独立于平台的JS-> Native Bridge?

时间:2012-10-29 20:04:08

标签: javascript android ios mobile-website

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

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

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

感谢您的任何信息!

3 个答案:

答案 0 :(得分:0)

您可以使用phonegap插件来执行此操作。它们提供了一种在webview和本机层之间进行通信的绝佳方式。

Here you can see how to create one!

我个人对这个主题的看法:我一直在使用phonegap一段时间,如果你正在浏览网页,我强烈建议你重新思考一下你做事的方式并转向移动网络平台。你可能可以节省很多时间。

我看到它的方式,使用它的最大缺点是你正在创建一个网页而不是一个移动应用程序。您无法使用本机组件,您的应用程序响应速度也会降低。由于您已经访问过网络视图,我相信您只能在这些平台上找到好处。

答案 1 :(得分:0)

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

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);
}

请注意,我现在把这个编成了我的头脑并没有时间进行测试 - 但我觉得它应该可以运作得很好,只要我没有犯任何重大错误

答案 2 :(得分:0)

如果您打算使用WKWebView

,可以尝试XWebView项目