Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未能启动';URL';因为方案没有注册的处理程序_Javascript_Angular_Ionic Framework_Browser_Whatsapp - Fatal编程技术网

Javascript 未能启动';URL';因为方案没有注册的处理程序

Javascript 未能启动';URL';因为方案没有注册的处理程序,javascript,angular,ionic-framework,browser,whatsapp,Javascript,Angular,Ionic Framework,Browser,Whatsapp,我正在尝试用angular 11和ionic 5构建一个社交共享组件。我正在使用锚标记调用href=”whatsapp://send?#text=some%20text". 这在安装了WhatsApp的设备上运行良好,但在未安装WhatsApp的设备上,我只在浏览器控制台中收到以下错误: 未能启动'whatsapp://send?#text=text=some%20text'因为方案没有注册的处理程序 如何捕获此错误,向用户显示一条漂亮的消息,如“对不起,您没有安装WhatsApp”如果直接使用

我正在尝试用angular 11和ionic 5构建一个社交共享组件。我正在使用锚标记调用href=”whatsapp://send?#text=some%20text". 这在安装了WhatsApp的设备上运行良好,但在未安装WhatsApp的设备上,我只在浏览器控制台中收到以下错误:

未能启动'whatsapp://send?#text=text=some%20text'因为方案没有注册的处理程序


如何捕获此错误,向用户显示一条漂亮的消息,如“对不起,您没有安装WhatsApp”

如果直接使用
href
属性,似乎无法处理此错误

但是,如果在组件中移动此逻辑,则有几个选项

内部应用程序:

您可以使用检查应用程序可用性,即

let-app;
if(this.platform.is('ios')){
app='twitter://';
}else if(this.platform.is('android')){
app='com.twitter.android';
}
此.appAvailability.check(应用程序)
.那么(
(是:布尔)=>console.log(app+'可用),
(否:布尔)=>console.log(应用程序+'不可用')
);
内部浏览器:

  • 使用超时回退,即

    
    window.location=yourapp://app.com/?screen=xxxxx';
    setTimeout(“window.location=”)http://hastrk.com/serve?action=click&publisher_id=1&site_id=2';", 1000);
    
    事实上,这就是我们在一个web应用程序中使用的方法,它成功地工作了

  • 使用深度链接,它允许您像这样使用深度链接

    存储ID(特定于操作系统)
    
    我以前没用过,所以没什么特别的


  • 如果直接使用
    href
    属性,似乎无法处理它

    但是,如果在组件中移动此逻辑,则有几个选项

    内部应用程序:

    您可以使用检查应用程序可用性,即

    let-app;
    if(this.platform.is('ios')){
    app='twitter://';
    }else if(this.platform.is('android')){
    app='com.twitter.android';
    }
    此.appAvailability.check(应用程序)
    .那么(
    (是:布尔)=>console.log(app+'可用),
    (否:布尔)=>console.log(应用程序+'不可用')
    );
    
    内部浏览器:

  • 使用超时回退,即

    
    window.location=yourapp://app.com/?screen=xxxxx';
    setTimeout(“window.location=”)http://hastrk.com/serve?action=click&publisher_id=1&site_id=2';", 1000);
    
    事实上,这就是我们在一个web应用程序中使用的方法,它成功地工作了

  • 使用深度链接,它允许您像这样使用深度链接

    存储ID(特定于操作系统)
    
    我以前没用过,所以没什么特别的


  • 不幸的是,如果应用程序在浏览器中运行,则此操作不起作用。一个有效的例子是亚马逊:产品页面->开发工具->选择移动设备->重新加载页面->共享->whatsappYeah,你说得对。appAvailability在浏览器中不起作用。是我的错。让我研究一下,也许我能找到一个solution@Nico,请查看我添加纯浏览器解决方案的答案的更新版本。希望它只能用于iOS和Android上的本机应用程序。随着时间的推移,我认为这可以归结为一种解决方法,例如,计时器假定在某个时间之后会发生某个动作,否则该应用程序可能没有安装在设备上,或者类似于我在之前的评论中说我对
    appAvailability
    的看法是错误的。在我上次的回答更新中,我添加了纯浏览器解决方案。例如,您是否看到了
    setTimeout
    解决方案?不幸的是,如果应用程序在浏览器中运行,则此解决方案不起作用。一个有效的例子是亚马逊:产品页面->开发工具->选择移动设备->重新加载页面->共享->whatsappYeah,你说得对。appAvailability在浏览器中不起作用。是我的错。让我研究一下,也许我能找到一个solution@Nico,请查看我添加纯浏览器解决方案的答案的更新版本。希望它只能用于iOS和Android上的本机应用程序。随着时间的推移,我认为这可以归结为一种解决方法,例如,计时器假定在某个时间之后会发生某个动作,否则该应用程序可能没有安装在设备上,或者类似于我在之前的评论中说我对
    appAvailability
    的看法是错误的。在我上次的回答更新中,我添加了纯浏览器解决方案。例如,您是否看到
    setTimeout
    解决方案?