0

我正在嘗試開發一個小書籤,用於刪除用戶當前的網頁並存儲從中提取的一些數據。在我自己的網站上,我的用戶通過Facebook API登錄。通過小書籤使用Facebook API

當使用我的書籤,我可以成功地呈現Facebook登錄模式,但在API中籤拋出一個異常:

指定的URL不屬於應用程序。

我對此很陌生,但大概是這是因爲小書籤訪問的當前頁與我自己的域不匹配?

我從一個外部文件運行的JavaScript,託管在該域 - 應該不夠嗎?

或者,我該如何解決這個問題?不幸的是,我無法提供自己的帳戶管理功能,並依靠Facebook進行用戶管理。

任何解釋和創意點讚賞。

+0

_「我正在從接通該網域外部文件的JavaScript - 應該說是不夠的?「_ - 不是,因爲那只是從腳本中加載腳本的地方,而是在當前文檔的上下文中執行_executed_。 – CBroe 2013-03-06 01:02:12

+0

我明白了,謝謝。也許我需要以某種方式刮掉數據,在我的域名(呃)上打開一個新標籤並從那裏提交?希望有人會建議更優雅的東西。 – 2013-03-06 01:03:23

回答

0

解決方案是在當前頁面上的iframe或新標籤頁或新彈出窗口中,在您自己的域中託管登錄步驟。無論如何,少一點都不太安全。

可能採取的步驟:

  1. 小書籤運行和擦傷的數據。
  2. Bookmarklet創建iframe與src =「http://yourdomain.com/bookmarklet-widget?data = ....」
  3. 如果尚未登錄,則小部件內容頁面首先需要登錄步驟。

如果數據量較大,用GET提交,可以使用POST。步驟將會像

  1. Bookmarklet運行和擦除數據。
  2. Bookmarklet創建名爲「mywidgetframe」的空iframe。
  3. Bookmarklet使用method = post target = mywidgetframe和action =「http://yourdomain.com/bookmarklet-widget」創建表單
  4. Bookmarklet提交表單。
  5. 如果尚未登錄,則小部件內容頁面首先需要登錄步驟。

如果需要的iframe /窗口和當前父頁面之間的直接溝通,看看http://enable-cors.org/

+0

謝謝你,這是非常有益的。我還發現以下鏈接有用http://kathrynbrisbin.blogspot.com/2010/01/how-to-create-bookmarklet-like.html – 2013-03-06 22:02:58

+0

您的鏈接讓我注意到我犯的一個錯誤。我共享的enable-cors鏈接與跨站點iframe通信無關。這是關於啓用跨站點AJAX。對於跨站點iframe通信,請查看「postMessage」函數。在你分享的鏈接中,他/她在「giftyHandleMessage」中使用了過時的舊技術。對於非常簡單的情況,它可以很好。它具有在舊版瀏覽器中工作的優勢,但也有缺點,例如可能會破壞使用散列片段存儲狀態的網頁。 – 2013-03-07 05:34:21