Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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 在移动应用程序的非http方案中有深度链接时,如何避免混合/不安全的内容警告?_Javascript_Android_Mobile_Https - Fatal编程技术网

Javascript 在移动应用程序的非http方案中有深度链接时,如何避免混合/不安全的内容警告?

Javascript 在移动应用程序的非http方案中有深度链接时,如何避免混合/不安全的内容警告?,javascript,android,mobile,https,Javascript,Android,Mobile,Https,比如说,我有一个手机应用程序,可以监听所有“myawesomeapp”方案链接,这样它就可以在应用程序中打开它们,我还有一个相关的网站。现在当一个页面,例如,https://myawesomeapp.com/home/加载到浏览器中,我动态创建一个iframe并将其添加到文档中,src为myawesomeapp://myawesomeapp.com/home/这样我的应用程序就可以尝试打开自己的页面。但是,当从HTTPS上提供的页面创建这样的链接时,大多数现代浏览器都会显示不安全/混合内容警告。

比如说,我有一个手机应用程序,可以监听所有“myawesomeapp”方案链接,这样它就可以在应用程序中打开它们,我还有一个相关的网站。现在当一个页面,例如,
https://myawesomeapp.com/home/
加载到浏览器中,我动态创建一个iframe并将其添加到文档中,src为
myawesomeapp://myawesomeapp.com/home/
这样我的应用程序就可以尝试打开自己的页面。但是,当从HTTPS上提供的页面创建这样的链接时,大多数现代浏览器都会显示不安全/混合内容警告。有没有办法避免这种行为

浏览器无法保证协议
myawesomeapp
是安全的(如https)。因此,出于安全考虑,它必须警告用户,不安全的内容正在加载到其他安全页面中


您可以在服务器上创建服务以重定向到另一个方案。i、 e.
https://website.com/deeplink/appscheme/path
会将浏览器重定向到
appscheme://path

我想你想要的是,如果用户单击指向你网站的链接,他可以选择在你的应用程序中而不是在浏览器中打开链接

在Android中实现这一点的方法是注册一个意向过滤器,这样当用户单击指向您域名的链接时,您的应用程序就会启动

请参见此处的示例意图过滤器:

这比使用自定义方案要好,因为链接将直接引导用户访问应用程序,而不是将站点加载到浏览器中,然后打开应用程序


这与iOS的工作原理不同,是的。为了保持两者的兼容性,您可以嗅探useragent,并仅在iOS浏览器中显示带有自定义方案的iframe。

您能试用此代码吗?当文档准备就绪时调用它,并将应用程序的url传递给它

var redirect = function ( location ) 
{
    var iframe = $('<iframe></iframe>').attr( 'src', location ).css({
        width: 1,
        height: 1
    });
    $( 'body' ).append( iframe );
    iframe.remove();
    iframe = null;
};
var redirect=函数(位置)
{
变量iframe=$('').attr('src',location).css({
宽度:1,
身高:1
});
$(“body”).append(iframe);
iframe.remove();
iframe=null;
};
根据
iframe src
技巧不再有效

如果你想让你的应用程序在登录到网页时自动触发,我发现将该网页的
标记放在下面是有效的:

其中
myprotocol
是意图过滤器中的“方案”

但是,我不确定这个方法是否也会被浏览器的未来版本“阻止”。正如上述链接所述:

您应该执行用户手势以通过自定义方案启动应用程序,或使用“intent:”语法


在我看来,他们只希望通过用户发起的手势(如单击按钮或链接)来触发意图。如果网页本身可以触发意图,则可能存在安全问题。

您是否尝试过使用window.open而不是iframe?鉴于您不是真正创建自定义协议,而只是在
myawesomeapp
的浏览器中打开页面,我建议根本不要使用
myawesomeapp://
方案。在您的Android和iOS应用程序中,注册
http
https
的url处理程序,在
myawesomeapp.com
@bengrim上进行过滤。您知道如何为自定义协议修复此问题吗?我尝试过此方法(使用重定向端点),但这不会触发目的。抱歉,我想要的是一个同时适用于iOS和Android的解决方案。此外,在移动站点上,我会避免使用用户代理嗅探(因为与许多其他移动站点一样),这也是一个单页应用程序。因此,当我目前只为静态页面提供服务时,我不希望在响应时间上增加任何开销。