我目前正在开发一款应用程序,该应用程序在iOS和Android上积极使用网页浏览来呈现内容,并使用原生铬环绕它。我希望能够通过javascript方法控制这个chrome。
Android Webview有addJavascriptInterface允许这种情况发生,但iOS没有这种功能。我已经在iOS JavaScript bridge检查了SO答案,这有用的信息,但它仅限iOS;最佳地,相同的底层Web代码可以为Andorid和iOS设备上的回调提供动力。
我想知道像PhoneGap或Appcelerator这样的东西是否提供了一种简单的方法;但是我不需要他们的核心产品(通过底层的html / css / js提供原生体验),我甚至不知道我的包装中是否包含了我的产品。
感谢您的任何信息!
答案 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项目