我已经在Web应用程序中成功创建并注册了自定义协议处理程序,并且在所有浏览器中都可以正常工作。关于启动外部应用程序的初始警告对话框很好。
但是,在部署应用程序且网站在SSL下运行时,自定义协议链接在Chrome中不再起作用。我看到以下消息出现在开发人员工具控制台中:
[已阻止] https://my.site.com/path/to/page上的页面运行了来自iwd的不安全内容:-action = myaction
在Internet Explorer和Firefox中,相同的链接也可以正常工作。
关于如何进行这项工作的任何想法?顺便说一下,我的外部应用程序是安装在客户端上的控制台应用程序。
编辑:另外一条重要的信息是,该链接指定了一个目标,该目标是同一页面上的隐藏iframe。
解决方案是不为Chrome用户指定目标框架。Chrome似乎正在查看从主页传递到嵌入式iframe的网址,并发现嵌入式iframe网址不安全,因此拒绝了该网址。
我认为Chrome并非总是这样,但是对于v30 +,解决方案似乎是在链接中指定目标并清空目标。
这是我用来清除链接的目标属性的JavaScript(仅适用于Chrome用户)-否则,简单的解决方案是首先不要在HTML中指定目标属性。
// Get a list of all the links with external commands
var commandButtons = $("a[target='my_command']");
updateCommandButtonTargetsForChrome();
// Remove target attribute for Chrome only users
function updateCommandButtonTargetsForChrome() {
var browserInfo = getBrowserInfo();
if (browserInfo[0] == "Chrome")
commandButtons.attr("target", "");
}
function getBrowserInfo() {
var n = navigator.appName, ua = navigator.userAgent, tem;
var m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
if (m && (tem = ua.match(/version\/([\.\d]+)/i)) != null) m[2] = tem[1];
m = m ? [m[1], m[2]] : [n, navigator.appVersion, '-?'];
return m;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句