【问题标题】:Webkit communication with native environmentWebkit 与原生环境的通信
【发布时间】:2014-10-14 23:11:10
【问题描述】:

如果我在我的 Android 或 iPhone 应用程序中加载了 webkit 视图,我可以在 webkit 的页面中来回传递数据吗?

例如,我可以从网络上拉下一个 html 视图并在该视图中填充我设备上存储的数据的表单吗?

【问题讨论】:

    标签: iphone android webkit


    【解决方案1】:

    是的,在 Android 中使用 addJavaScriptInterface()

    class MyInterface {
        private String someData;
        public String getData() { return someData; }
    }
    
    webview.addJavaScriptInterface(new MyInterface(), "myInterface");
    

    在你的 webview 的 html 中。

    <script type="text/javascript">
         var someData = myInterface.getData();
    </script>
    

    顺便说一句,如果你使用的网页不是你的(这样你就不能修改它),你可以插入 javascript inline。例如:

    webview.loadUrl("javascript:document.getElementById('someTextField').value = myInterface.getData();");
    

    【讨论】:

    • 如果我理解正确,这需要您修改 html 以插入 javascript 块...可能会变得很麻烦。此外,请注意 Android 开发者网站上的安全注意事项。
    • @Pontus 如果页面不是由您拥有/设计,它只需要您在运行时修改页面的 HTML。如果您从本地资源或您控制的站点加载,那么您不需要任何疯狂的注入技术。在某些情况下,了解哪些功能可用以及如何使用它是非常有益的。
    【解决方案2】:

    对于 iPhone,您可以使用 stringByEvaluatingJavaScriptFromString 从 Objective-C 调用 JavaScript 函数。

    例如,要获取名为“fname”的输入字段的值:

    NSString * fString =[webView stringByEvaluatingJavaScriptFromString:@"document.getElementByName(\"fname\").value"]; 
    NSLog(@"fString: %@",fString);
    

    【讨论】:

    • 现在在 2014 年第一季度,iPhone 有什么变化吗?还是这仍然是唯一的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2018-05-03
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多