【发布时间】:2015-12-13 18:57:17
【问题描述】:
我正在开发一个小型 JavaFX 应用程序,该应用程序旨在打开 Pushbullet 身份验证网页以获取 OAuth 访问令牌。用 JavaFX 编写它非常简单。但是,当我填写表格并使用 Google 帐户进行验证时,身份验证失败。由于当我在本机 Chrome 浏览器中打开 URL 时同样有效,我认为问题与 JavaFX WebEngine 实现的有限能力有关,但我无法弄清楚它是什么。
下面是我使用的一段代码:
import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Screen;
import javafx.stage.Stage;
public class GraphicalAuthorizationHelper extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(final Stage stage) throws Exception {
BorderPane borderPane = new BorderPane();
WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
borderPane.setCenter(browser);
webEngine.documentProperty().addListener((prop, oldDoc, newDoc) -> {
//enableFirebug(webEngine);
});
String url = "https://www.pushbullet.com/authorize?client_id=hjT07gVHUYnzN1iVlWIFU7K1Sxype0bf&redirect_uri=http://oauth.yfiton.com/callback&response_type=token";
webEngine.load(url);
Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
Scene scene = new Scene(
borderPane,
primaryScreenBounds.getWidth() * 0.55,
primaryScreenBounds.getHeight() * 0.65);
stage.setScene(scene);
stage.show();
}
private static void enableFirebug(final WebEngine engine) {
engine.executeScript("if (!document.getElementById('FirebugLite')){E = document['createElement' + 'NS'] && document.documentElement.namespaceURI;E = E ? document['createElement' + 'NS'](E, 'script') : document['createElement']('script');E['setAttribute']('id', 'FirebugLite');E['setAttribute']('src', 'https://getfirebug.com/' + 'firebug-lite.js' + '#startOpened');E['setAttribute']('FirebugLite', '4');(document['getElementsByTagName']('head')[0] || document['getElementsByTagName']('body')[0]).appendChild(E);E = new Image;E['setAttribute']('src', 'https://getfirebug.com/' + '#startOpened');}");
}
}
我注意到该代码可用于成功获取 Twitter 或 Slack 的 Oauth 访问令牌,但不能使用 Pushbullet 身份验证机制。提交表单时,我收到错误登录您的帐户时出错:无法连接到服务器:
大约两周前,我向 Pushbullet 团队发送了一封电子邮件,但没有得到答复。同时,我尝试使用 firebug 来了解可能是什么问题,但没有成功:
欢迎任何想法、评论等。
【问题讨论】:
-
您是否启用了本地存储?该网站要求这样做,这是我们看到的最常见的错误。
-
@ChrisPushbullet 谢谢你的评论。不幸的是,问题似乎不是来自本地存储。我使用的是 Java 8,文档说本地存储是用这个版本的 Java 实现的。我还通过将变量 url 的值(在我上面发布的代码中)更改为
"http://html5demos.com/storage", 来测试这个事实 -
我问了制作该页面的人,错误“无法连接到服务器”似乎就是这个意思。所以对服务器的请求失败了,也许你可以看看 firebug 中的网络检查器来找出原因。我有一个随机理论,它可能与 CORS 有关。 API 位于 api.pushbullet.com,这是一个不同的域,因此需要 CORS 才能发出请求。
标签: javascript authentication javafx pushbullet webengine