我和我的团队目前正在大学从事软件项目,我目前的任务是将我们的桌面 javafx 应用程序与 Facebook 绑定。
基本上我在控制器中有一个 fxml 方法,当用户在我的 GUI 中点击“共享”按钮时会调用该方法。在我想简单地使用 WebView 打开我的 .html 文件的方法中:
@FXML
public void shareFacebookClicked() throws Exception{
// Setting up the webview
WebView webView = new WebView();
final WebEngine webEngine = webView.getEngine();
webEngine.setJavaScriptEnabled(true);
// Read the html file and let the web engine load it.
File file = new File(getClass().getClassLoader().getResource("facebook.html").toURI().getPath());
webEngine.load(file.toURI().toURL().toString());
Stage stage = new Stage();
stage.initOwner(this.stage);
stage.setScene(new Scene(webView, 1000, 800));
stage.show();
}
没有问题,我的“facebook.html”文件已加载并在网络视图中正确显示(嗯,几乎正确)。
实际问题是我不断收到 191 Facebook 错误,指出该链接不属于应用程序。由于互联网上有大量关于此的帖子和问题(是的,我检查并阅读了所有这些帖子和问题)这里是我已经知道的事情:
- 我在 Facebook 开发者网站上注册了我的应用程序。我知道 AppID 和 Secret
- 我知道这个错误主要是因为人们忘记在设置中设置他们的网站 URL 和域。问题是我没有网站。我只有一个简单的 .html 文件,我想在 javafx 内的 Web 视图中使用它。但是,我尝试了 stackoverflow、facebook 帮助中心和其他论坛上建议的所有可能组合,包括:将网站 URL 设置为http://localhost/,将域设置为 localhost,启用嵌入式浏览器 OAuth 登录,也将重定向 URI 设置为 localhost 等.
- 我假设我的目标可以通过使用 RESTfb、Facebook4j 或 Graph API 来实现。当我尝试这些时,我不得不停下来,因为我遇到了用户身份验证问题,而且我认为这个当前选项将是最简单的方法(考虑到这个功能在我们的软件中具有低优先级)。
这些都没有解决我的问题,因此我放弃了研究答案并决定发布我自己的个人问题。在我看来,.html 文件中一定有一些错误和/或我完全误解了它的工作方式。.html 文件:
<html>
<head>
<title> Share on Facebook </title>
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.5.1.js"></script>
<script src="https://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#shareonfacebook').click(function (e) {
FB.ui({
appId: 'MY_APP_ID',
display: "popup",
method: "feed",
name: "Test",
link:"",
caption:"Test",
description: "Test",
});
});
});
</script>
</head>
<body>
<div id="fb-root"></div>
<button id="shareonfacebook" >Share</button>
<script>
FB.init({
appId : 'MY_APP_ID'
});
</script>
</body>
</html>
我部分地从教程站点获得了此代码。理论上它应该工作。我想要的只是一个对话框,用户可以在其中发布他/她使用我们的软件完成的锻炼结果。目前,当打开 .html 文件时,有一个简单的按钮可供单击。这和 javascript 中的所有“测试”字符串仅用于测试。我只是想实现我可以在墙上张贴一些东西。下一步当然是以某种方式动态设置发布文本等。
请告诉我我做错了什么或者我应该如何处理整个事情。就像我说的那样,任务很小,因此应该不会那么困难,但是我已经在笔记本电脑前坐了 2 天,但没有任何成功。如果需要,我准备发布更多代码或提供更多信息。
提前感谢您的帮助!