我正在尝试强制我的应用中的链接在外部浏览器中打开。我正在使用jQuery mobile& Phonegap build。
我的应用有一个页面,其中包含已生成的联系详细信详细信息中包含该人员网站的链接:
row+='<div class="accWWW"> <a href="http://'+ data[i].website +'" onclick="openGenerated(this); return false;">'+ data[i].website +'</a></div>';
我在代码中定义了这两个函数。
//function which forces open in browser
function openBrowser(url){
if(device.platform === 'Android') {
navigator.app.loadUrl(url, {openExternal:true});
} else {
window.open(url, '_system');
}
}
//opens generated URL's
function openGenerated(obj){
var url = obj.getAttribute("href");
console.log(url);
openBrowser(url);
return false;
}
我的index.html中还有一个简单的<div class="accWWW"> <a href="#" onclick="openBrowser('http://www.google.com');"> Google </a></div>
设置
所以...这个链接到谷歌在iOS上完全打开(尚未在Android上测试,因为iOS是我最大的问题),但如果我没有添加openGenerated函数,生成的链接将无法执行任何操作。现在有一个动作,但它在应用程序内打开。
你知道为什么会这样吗?
同样在检查笔记本电脑时,我在控制台中收到这些错误( link 是我的开发网址):
Uncaught ReferenceError: device is not defined *link*:277 // makes sense probably, because I am not using a mobile device
Uncaught SecurityError: Blocked a frame with origin "http://www.test.com" from accessing a frame with origin "*link*". Protocols, domains, and ports must match.// what is this?
我想也许这是一个访问问题,但我在我的config.xml中添加了<access origin="*" browserOnly="true" />
,所以这应该没有问题。
LATER EDIT:在Android上,Google链接根本不起作用,生成的链接在应用内打开...显然,device.platform始终为null,但设备插件已添加到我可以在phonegap中看到xml构建这个插件列表:
Installed Plugins
Apps will be built with the latest version of a plugin unless you lock the version in your config.xml (see below). -- Plugin installed as a dependency of another plugin
Third Party VERSION LATEST VERSION
com.phonegap.plugin.statusbar 1.1.0 1.1.0
PhoneGap Core
org.apache.cordova.device 0.2.8 0.2.8
org.apache.cordova.inappbrowser 0.3.3 0.3.3
稍后编辑:
Device.platform似乎没有用,所以我修改了我的功能,将Ved的建议添加到:
function openBrowser(url){
if(navigator.app)
navigator.app.loadUrl(url, {openExternal:true});
else {
var ref = window.open(url, '_system', 'location=no');
ref.addEventListener('loadstart', function(event) {
});
ref.addEventListener('loadstop', function(event) {
console.log(event.type + ' - ' + event.url);
});
ref.addEventListener('exit', function(event) {
});
}
}
iOS上的仍在应用内打开。对于Android,我认为它工作正常。
答案 0 :(得分:0)
我解决了我的问题。
我在我的html中添加了cordova.js。显然这破坏了事情。