深入解析Webview技术:全面掌握移动应用开发的核心组件

2024-12-11 0 764

近年来,互联网技术飞速进步,软件交互的内在机制引起了广泛关注。你是否了解,我们平时在电脑软件上看到的互动,实际上是由HTML页面在默默支撑?那些看似普通的互动背后,其实隐藏着许多我们未曾察觉的细节。

HTML页面在PC软件中的存在

在多数我们常用的电脑软件中,交互界面多由HTML页面构成。这些页面隐藏在软件光鲜亮丽的表面之下。比如,某些办公软件的设置界面,看似是软件自身的一部分,实则是由HTML页面构成。这种做法相当普遍,然而大多数用户对此并不了解。在这些软件里,HTML页面能够融合多种功能模块,例如按键操作、菜单配置等,只是普通用户并未意识到这一事实。

/**
 * 作用域下的JSBridge,
 * 和实例化后的getNetInfomation,
 * 均根据实际约定情况而定,
 * 这里只是用来举例说明
 */
const bridge = window.JSBridge;
console.log(bridge.getNetInfomation());

IOS中,主要使用WebViewJavascriptBridge来注册,可以参考Github WebViewJavascriptBridge
jsBridge = [WebViewJavascriptBridge bridgeForWebView:webView];
...
[jsBridge registerHandler:@"scanClick" handler:^(id data, WVJBResponseCallback responseCallback) {
 // to do
}];

对软件开发者来说,这同样带来了不少便利。它能简化代码的更新过程,还能实现代码的重复利用。若要修改某个功能或界面,只需对HTML页面代码稍作改动,无需对整个软件结构进行全面重建。

在Android中,需要通过addJavascriptInterface来注册
class JSBridge{
 @JavascriptInterface //注意这里的注解。出于安全的考虑,4.2 之后强制要求,不然无法从 Javascript 中发起调用
 public void getNetInfomation(){
 // to do
    };
}
webView.addJavascriptInterface(new JSBridge();, "JSBridge");

在移动端的广泛应用

在手机上,HTML页面广泛分布。比如,乘坐地铁时阅读的公众号文章,就是HTML页面的常见例子。我们常用的App里,许多关键操作流程都依赖于它。以购物App为例,商品详情页面通常也是HTML页面。这类页面在我们的手机应用中极为普遍。

HTML页面设计使得数据传输和交互变得便捷。比如,它能轻松从服务器获取商品资讯,呈现给用户,还能根据用户操作即时刷新页面内容。

schema://path?param=abc

交互方式中的功能展现

以UIWebView为例,在IOS中,UIWebView内发起网络请求时,可以通过delegate在native层来拦截,然后将捕获的schema进行触发对应的功能或业务逻辑(利用shouldStartLoadWithRequest)。代码如下:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
 //获取scheme url后自行进行处理
 NSURL *url = [request URL];
 NSString *requestString = [[request URL] absoluteString];
 return YES;
}

在交互操作上,HTML页面具备众多功能。比如,它能判断第三方应用是否已安装。举例来说,当我们在手机浏览器中点击社交媒体链接时,系统会先检查手机上是否安装了相应的应用。此外,它还能获取网络信息,这对于优化内容加载过程至关重要。以视频应用为例,HTML页面会检测当前的网速,并根据这一信息来调整视频播放的画质。

在Android中,可以使用shouldoverrideurlloading来捕获schema url。代码如下:
public boolean shouldOverrideUrlLoading(WebView view, String url){
 //读取到url后自行进行分析处理
 //这里注意:如果返回false,则WebView处理链接url,如果返回true,代表WebView根据程序来执行url
 return true;
}

这些功能旨在提升用户的交互感受。在用户进行各种操作时,HTML页面上的这些特性确保了操作的顺畅和精确。

URL的特殊作用

URL在HTML页面交互中扮演着至关重要的角色。它不仅支持页面内部的交流,还能实现不同App之间的跨平台交互。例如,像转转这样的互联网巨头,就广泛采用了这种类似伪协议的链接方式。当我们点击链接从一款App跳转到另一款App时,URL能够帮助我们精确地找到并加载目标页面。

在电商领域,用户从推广应用直接切换至购物应用中特定商品页面,这一过程就依靠了这种URL链接的便利。这就像是一张通行证,让用户能在不同应用间自如穿梭。

IOS端内,会将schema作为参数传入一个提前定义好的回调函数内,然后执行该回调函数。此回调函数,可以通过得到的schema去进行解析,然后定向到app内的固定的某个页面。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
 // 参数 url 即为获取的 schema
 // to do
} 

性能提升与内存占用

采用这种HTML页面交互技术,不仅提高了效率,还减少了内存消耗。过去,网页加载和显示需要占用大量内存和性能资源,而现在,这些任务由服务器上的独立进程负责处理。以图片编辑应用为例,当启动特定功能时,其HTML页面的内存使用量显著下降,运行速度也大幅提升。

在Android端内,会稍微麻烦一些,在外部的m页,会发起一个schema的伪协议链接,系统会去根据这个schema去检索,需要被拉起的App需要有一个配置文件,大致如下:
<activity
 android:name=".activity.StartActivity"
 android:exported="true">
 <intent-filter>
 <action android:name="android.intent.action.VIEW"/>
 <category android:name="android.intent.category.DEFAULT"/>
 <category android:name="android.intent.category.BROWSABLE"/>
 <data android:scheme="zhuanzhuan"/>
 </intent-filter>
</activity>

服务器响应完毕后,对容器内容的加载管理变得更为细致入微。与传统方法相比,这种做法的优势显而易见。

存在的痛点与挑战

public class StartActivity extends TempBaseActivity {
 Intent intent;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
        intent = getIntent();
 Uri uri = intent.getData();
    }
}

然而,这其中确实有不少难点和难题。比如,用户登录后,在HTML页面无法获取登录状态,这种情况在iOS设备上尤为常见。不同iOS版本的处理延迟各不相同,这对开发者来说是个不小的麻烦。而且,HTML页面首次打开时,往往需要经过一个初始化过程,这个过程耗时较长,也是普遍存在的问题。

作为用户,我们能否忍受这种交互中常见的困扰?期待大家在评论区发表看法。若觉得文章对您有帮助,不妨点赞并分享。

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

七爪网 行业资讯 深入解析Webview技术:全面掌握移动应用开发的核心组件 https://www.7claw.com/2801946.html

七爪网源码交易平台

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务