常見問題(FAQ)

由於 Canvas 在國內的資訊不多, 所以我們試著將我們遇到、解決的問題, 搜集作整理在這個常見問題集內, 希望對大家有幫助。

Videos 自動播放

張貼者:2019年11月18日 上午3:05Jobs Dennis   [ Jack Liou 已於 2019年11月18日 下午6:07 更新 ]

會有這篇是因為有老師問,在 Moodle 課程中使用像 mp4 的影音素材,最近遇到的問題:
就是這個錯誤訊息: DOMException: play() failed because the user didn't interact with the document first.
這就要帶出以下的內容。在這之前如果你對 Moodle 使用影片教材有疑問,IT邦幫忙有篇文章說明Youtube有些資源: Youtube 影片嵌入(頁面) 、HTML5 影片嵌入(檔案資源)都可以參考。

Chrome 對 Autoplay 的限制

大家最常使用的  moodle 教材,應該就是影片了,以影片教材為例;你可能會注意到我們 Moodle 上的活動(videos) 預設都是無聲音的,回想一下以前逛過的部落格一進去,馬上就有音樂播放(好聽的音樂大家會覺得很悅耳,但每個人的喜好不同,你播放的音樂不一定是別人喜歡的,某種程度上或許會給別人帶來一些困擾)。
Moodle Cam (Screen capture & web camera recording)
那麼,影音在Chrome瀏覽器(Moodle)上,預設到底可不可以讓 video 自動播放呢?在早期瀏覽器是允許這個行為的,但現在是不允許的,但在一些條件下,還是可以自動播放的:
  • 設定靜音,則允許自動播放(Muted autoplay is always allowed)
  • 用戶的行為(使用者與瀏覽器互動),  如: click、touch 事件,當使用者點擊播放...
  • 使用 iframe: 頂部 frame 可以將自動播放權限委託給他們的 iframe,允許自動播放聲音

Video tag

以影片播放來舉例:
<video id="videos" controls="controls" preload="none" poster="http://media.w3.org/2010/05/sintel/poster.png">
    <source src="http://media.w3.org/2010/05/sintel/trailer.mp4" type="video/mp4" />
</video>
建立活動就像下圖(當然您在建立時要切到 HTML 模式, 可參考: iframe 影音教材影音教材資源
Moodle edit video tag with autoplay

自動撥放

若是透過 JavaScript 來操控這個 Video 來讓他自動播放:
<script type="text/javascript">
  window.onload = function() {
    var player = document.querySelector('video#videos');
    player.play();
  }
</script>

開啟F12(開發人員工具)會看到 console 有如下的錯誤:
DOMException: play() failed because the user didn't interact with the document first.
意思是,如果使用者和瀏覽器沒有互動的話,play() 會失敗;

解決方案

如果想要解決這個問題可以根據上面的方式,在 video tag 加入 muted 這樣 JavaScript 就可以成功執行 play() 方法。
以上面的例子,修改後:
<video id="videos" controls="controls" preload="none" poster="http://media.w3.org/2010/05/sintel/poster.png" muted>
    <source src="http://media.w3.org/2010/05/sintel/trailer.mp4" type="video/mp4" />
</video>


上面分享的 youtube 也有教大家怎麼用
加入 Video 的方法,歡迎參考。(這個影片全程用 Moodle Catch 錄製)

如何使用python使用Canvas Data REST API?

張貼者:2019年6月4日 上午7:45John MoodleTW

Q:
我們公司開始使用Canvas, 我負責取得平台的數據,並幫助分析處理。Canvas 提供了一個Data API,  我想用Python 來進行,這是我們公司產品功能的一部分。
我知道有官方文檔在(https://portal.inshosteddata.com/docs/api),但我真的不會使用的授權方法 和 它提供的 demo 程式碼。
Another: 
那麼,我應該如何開始我的python代碼與Canvas LMS Data API進行交互?
如何使用python使用Canvas Data REST API?
A:
您所提供的官方文檔並不是 Instructure 官方的文件(初步看到內容, 並沒有仔細去看...)。
Instructure 官方的 Canvas LMS 的 API 請參考: 
https://canvas.instructure.com/doc/api/index.html
如果您熟稔的語言是 Python , 要用 Python 開發你的APP;github 上有一支給 CherryPy 包裝好的工具: Canvas-CPTool
它的特色:
它把 OAuth2 Token 請求的流程,完全整合在以單行程式可完成的叫用方式。
使用 Python decorator 阻擋未經授權 user 訪問 CherryPy 的頁面。
內建 memcachable API (mmh3 hash 演算)機制呼叫 Canvas LMS API。
內有 try / except 讓 Canvas 回傳的訊息, 完整/忠實的回饋
mmh3(MurmurHash) 是從 cpp 改寫來的 hash 工具
使用這個工具就可以非常簡單的叫用 Canvas 的API; 例如:
cherrypy.tools.canvas = CanvasLMSTool.CanvasLMSTool(CANVAS_URL, CANVAS_CLIENT_ID, CANVAS_CLIENT_SECRET, MC)
canvas = cherrypy.tools.canvas  #just a shortcut

@cherrypy.expose
@cherrypy.tools.canvas()  #checks for a Canvas token, or forces user to perform the token request flow
def mycourses(self):
    # Get the Canvas user's list of courses and cache the result for 300 seconds
    courses = canvas.api('get', '/api/v1/courses', ttl=300)
    return course  #returning a simplejson object
CANVAS_URL: Canvas 的網址。
CANVAS_CLIENT_ID: Canvas Client ID...
CANVAS_CLIENT_SECRET: Canvas Token key.
是不是比較簡單了?



呼叫在 Canvas 的 API

張貼者:2019年6月4日 上午7:02John MoodleTW

Q:
請問如何在 PHP 中使用指令呼叫在 Canvas中 REST API?
例如: 課程開始日期和結束日期。
A:
其實呼叫 Canvas 的 API 並沒有持別給 PHP 呼叫的,RESTful API 的方法也都一樣。
你要先了解 Canvas API,如果能用 curl 組合成指令呼叫 API,就能在 PHP 中使用了。 
以我們在公司提供校方培訓工程師的文件中,截取的內容:

所有課程

假設我們要取得所有課程, 你需要使用的 API 及相關資訊如下:
  • API: GET /api/v1/courses
  • URL: https://canvas.click-ap.com/api/v1/courses 
  • API Token: 請向系統管理取得...
用 curl 或 瀏覽器 用 GET 取得, 你應該會得到如下的內容:
{
  "course": {
    "title": "經濟學",
    "description": "經濟學課程主要探討重要的經濟理論與應用,及目前各國經濟的現況與發展。",
    "path": "course-1",
    "canvas_course_id": 10010010,
    "teaser": "This is an example teaser",
    "enrollment_open": true,
    "visibility": "listed",
    "enrollment_cap": 150,
    "waitlist": true,
    "waitlist_cap": 25,
    "enrollment_fee": 00.00,
    "days_to_complete": 45,
    "list_order": 123,
    "credits": 4,
    "sku": "01120000A"
  }
}


如果單純用 curl 的指令應該是這樣:
curl -H 'Authorization: Bearer $auth'https://canvas.click-ap.com/api/v1/courses
取得成績
curl -H 'Authorization: Bearer $auth' https://canvas.click-ap.com/api/v1/accounts/123/analytics/current/grades
修改結束日期
curl https://canvas.click-ap.com/api/v1/courses/123 -X PUT -d 'end_at=2018-05-28T14:00:00Z'

以上只是大致舉例; 但因為 Canvas 的 API 功能包括很多, 無法一一為大家說明, 以上內容主要
參考自: https://canvas.instructure.com/doc/api/index.html 。


Canvas 支援 flash 嗎?

張貼者:2019年5月29日 下午4:51Moodle TW   [ 已更新 2019年5月29日 下午4:52 ]

Q:
我們公司的 Canvas 課程是用 Flash 做的; 大部份員工電腦都可以使用,少部份需要另外安裝 flash,但有些同仁的筆電就不能看,有沒有解決辦法?
A:
根據 Canvas 官方說明 - Canvas 發佈說明資訊 - 2018-06-02 :
Flash 內容提醒:只要各大瀏覽器依然支援 Flash,Canvas 就能顯示有關內容。Microsoft Edge、Safari、Chrome 和 Firefox 預設使用 HTML5 為顯示網站內容的首選方法,有助提供更快更安全的瀏覽體驗。以上瀏覽器最終會封鎖所有 Flash 內容。如欲 Canvas 發揮最佳性能,設計課程時應確保內容支援 HTML5。只要手動允許瀏覽器顯示 Flash 內容,便可繼續查看受影響的部分。使用相機和麥克風錄製 Canvas 多種格式的內容編輯器的媒體內容時,仍需 Flash 才可如常運作,Canvas 工程師會著手解決有關問題。
Flash 支援完全取決於 Browser...
我們講師建議盡早....



Canvas 與 Gmail

張貼者:2019年5月24日 下午8:47Jack Liou   [ 已更新 2019年5月24日 下午8:48 ]

Canvas 如何發送 email 郵件


連接到 Canvas 伺服器
編輯 /opt/canvas/canvaslms/config/outgoing_mail.yml 文件中,加入以下內容,USERNAME和PASSWORD分別用您的 gmail 帳戶用戶名和密碼換:

production:
address: smtp.gmail.com
port: 587
user_name: USERNAME@gmail.com
password: PASSWORD
authentication: login
domain: smtp.gmail.com
outgoing_address: USERNAME@gmail.com
default_name: Click-AP Canvas

重啟CanvasLMS

注意:

  1. 請將 /opt/canvas/canvaslms/ ,替換成你的目錄
  2. 編輯儲存後,請重啟Apache服務
  3. 使用郵件功能,請務必確認你的 canvas 網站配置了網域名稱,否則即使收到郵件,裡面的連結也打不開。(如果沒有設定 SSL 證書,打開連結時會有安全提示,忽略即可。)

Canvas 的官方發佈平台

張貼者:2019年5月23日 下午9:51Moodle TW   [ John MoodleTW 已於 2019年5月24日 上午6:04 更新 ]

1-6 of 6