我正在开发一个应用程序,除了自定义URL方案插件(https://github.com/EddyVerbruggen/Custom-URL-scheme)之外,几乎所有内容都已找到。我已成功安装插件并设置了signsrestaurantandbar的自定义URL方案。所以当我使用signsrestaurantandbar://时,我的应用程序就会打开。我面临的问题是处理URL。在自述文件中,它说我可以使用函数handleOpenURL(URL),但是我仍然在尝试在应用程序中加载特定页面时遇到问题。
这是我试过的:
function handleOpenURL(url) {
var strValue = url;
strValue = strValue.replace('signsrestaurantandbar://','');
window.location.href = strValue + ".html";
}
我把它放在我的index.html页面中......虽然它应该在加载signsrestaurantandbar://页面时打开page.html,但它没有正确执行。在我的chrome控制台中,它表示它已加载页面,但它显示为空白而没有任何错误,这只发生一次。当我第二次尝试加载signsrestaurantandbar://页面时,它只是加载应用程序。
我很感激有关如何使用自定义URL方案加载特定页面的任何提示。
答案 0 :(得分:10)
您需要确保在CSP
。
已添加2016-02-11:注意:您的应用程序现在已不安全。由您来保护您的APP。
它看起来像这样:
<meta http-equiv="Content-Security-Policy"
content="default-src * signsrestaurantandbar:;
style-src * 'self' 'unsafe-inline' 'unsafe-eval';
script-src * 'self' 'unsafe-inline' 'unsafe-eval';">
通常,通配符设置(*
)可以处理大多数应用程序,但不能处理您的“自定义”协议。
注意:通配符设置有可能让您的应用无法使用“app store”。
您可能还需要添加到config.xml
<allow-intent href="signsrestaurantandbar:" />
此白名单工作表应该有所帮助。 HOW TO apply the Cordova/Phonegap the whitelist system
你还应该阅读whitelist matrix,尤其是<allow-intent (...) />
部分 - 最好的运气
答案 1 :(得分:8)
使用以下代码添加全局handleOpenURL函数:
window.handleOpenURL = function(url) {
console.log(">>>>>>>>>>>>>>>>>>>");
// do stuff, for example
// document.getElementById("url").value = url;
console.log(url);
};
请参阅Cordova Custom URL Scheme Handling。
请注意,如果您在此功能中使用alert
,您的应用会挂起:
您无法在handleOpenURL代码中启动任何交互式功能,例如警报,如果您这样做,您的应用将会挂起。类似地,您不应该在那里调用任何Cordova API,除非您首先在setTimeout调用中将其包装,超时值为零。
此方法的好处是您无需使用Content-Security-Policy
元标记更改内容安全策略。