我有一个Phonegap(cordova)应用程序,我想在phonegap WebView中加载一些外部网页,我还有其他外部网页,我想在用户激活它时在Safari中加载.
通常,大多数人都有他们想要在WebView中打开外部链接的问题.将OpenAllWhitelistURLsInWebView设置为YES(在Cordova.plist/Phongap.plist中)可以解决该问题.
但我不想打开WebView的所有链接,只是一些.
我希望我可以打电话window.open('http://someexternalsite')在Safari window.parent.location.href = 'http://mysite'中打开并在WebView中打开它.
知道怎么做吗?
我正在写使用的PhoneGap(又名科尔多瓦)iOS应用程序,我有一个登录使用一个XMLHttpRequest通过SSL基本身份验证的用户一个简单的HTML登录页面.当您正确输入用户名和密码时,一切都运作良好.但是,如果输入错误的用户名/密码,则不会调用任何回调.
例如,如果您在Chrome上运行相同的代码,使用错误的用户名/密码,则Chrome会以类似的方式运行,但会弹出身份验证质询对话框.在chrome的对话框上点击取消会将控制权返回给我的javascript代码.不幸的是,在iOS上,UIWebView甚至不会弹出一个auth对话框,它只是挂起.我需要一种方法告诉用户他们输入了错误的用户名或密码,以便他们可以重试.
最接近的一个答案,我能找到的这个http://www.freelock.com/2008/06/technical-note-http-auth-with-ajax但是从服务器更改响应状态似乎并不像正确的事情.
这基本上是我的请求代码的样子,但是当发送一个错误的用户名或密码时,它永远不会到达我的onload回调(实际上onreadystatechange回调只被调用一次,那就是readyState 1,也就是OPEN).
var req = new XMLHttpRequest();
req.onload = function(ev) {
if (req.status == 401) {
alert("Invalid Username/Password");
document.getElementById('password').focus();
} else if (req.status == 200) {
window.location.href = some_secure_site;
} else {
// edit //
alert("Some other status");
}
}
req.onerror = function (ev) { alert('Error'); };
req.ontimeout = function(ev) { alert('Timeout'); };
req.open('GET', uri, true, userValue, passValue);
req.withCredentials = true;
req.send();
Run Code Online (Sandbox Code Playgroud) 在Linux中,有没有办法询问任何xdg服务或gtk服务,哪个应用程序是给定文件的默认应用程序?
我意识到xdg-open实际上会启动正确的应用程序.但是,我希望能够在上下文菜单中显示应用程序的名称.因此,当用户点击菜单项时,它将启动xdg-open,这将启动该应用程序.
在OSX上,我可以使用LaunchServices:
def getDefaultDarwinApplication(path):
import LaunchServices
import CoreData
import urllib
url = CoreData.CFURLRef.URLWithString_("file://"+urllib.quote(path))
os_status, app_ref, appurl = LaunchServices.LSGetApplicationForURL(url, LaunchServices.kLSRolesAll, None, None)
if os_status != 0:
return ""
apppath = app_ref.as_pathname()
name = os.path.basename(apppath).replace(".app", "")
return name
Run Code Online (Sandbox Code Playgroud)
希望在Linux上我可以使用类似的东西.内置的python模块是最好的,但即使屏幕抓取也行.