我在我的项目中有一个简单的WebView
。用户可以谷歌和搜索任何东西。我现在的问题是,通过点击某些链接,我会自动重定向到特定的应用程序(如果我安装了它)。
示例:
我在iPhone上安装了Adidas应用程序,然后点击“Adidas”-链接-〉我会被重定向到Adidas应用程序。这不应该发生。相反,链接应该在我的WebView
中打开。
这是我的webView
:
bool _isLoading = true;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Web View Example'),
),
body: SafeArea(
child: Column(
children: [
Expanded(
child: WebView(
initialUrl:
'https://www.sneakersnstuff.com/de/product/48276/adidas-4d-futurecraft?country_override=DE&utm_content=cpcadssnscf&gclid=CjwKCAjwoduRBhA4EiwACL5RP4YhIZ818uzJTmO8gKLX3Z6Vvff740OjFsxs2nL0yzf-uGyzW9ak6RoCxyEQAvD_BwE',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller = webViewController;
},
javascriptChannels: <JavascriptChannel>{
_extractDataJSChannel(context),
},
onPageStarted: (String url) {
setState(() {
_isLoading = true;
});
},
onPageFinished: (String url) {
setState(() {
_imagesWithSize = [];
_currentUrl = url;
_isLoading = false;
});
},
),
),
Row(
children: [
IconButton(
onPressed: () {
_controller.goBack();
},
icon: Icon(
Icons.arrow_back,
size: 50,
),
),
IconButton(
onPressed: () {
_controller.goForward();
},
icon: Icon(
Icons.arrow_forward,
size: 50,
),
),
],
),
SizedBox(
height: 20,
),
RoundedCornersTextButton(
title: 'Google',
isEnabled: !_isLoading,
onTap: () async {
await _controller.loadUrl('https://www.google.com');
},
),
],
),
),
);
}
有什么方法可以阻止其他应用程序打开?
2条答案
按热度按时间x4shl7ld1#
我不认为这是网络视图的问题。
实际上,有一些网站,当你打开它们时,他们会检查你是否使用移动的,如果是这样,他们还会检查你是否已经在设备上安装了应用程序。如果是这样,默认情况下会打开移动应用程序。
你能用谷歌搜索到其他网站(在webview里面),看看是否存在同样的行为吗?
xxb16uws2#
我也遇到了同样的问题。当你试图在浏览器中打开一个链接时,它会检测到该应用程序并要求你“在另一个应用程序中打开”。我注意到初始URL被更改,并以“全球速卖通://产品/详细信息?...”开头。
因此,为了防止这种情况,在'onNavigationRequest'方法中,在HTTP或HTTPS上对URL进行了验证。如果URL被更改以打开应用程序,则会被忽略。