IPython ノートブックでは、次のコードによって Raphael.js がグローバル名前空間に正常に読み込まれることが予想されます。
from IPython.display import Javascript
raphael_url = "https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"
Javascript('alert(Raphael);', lib=[raphael_url])
ただし、require.js を使用する最近のバージョンの IPython では機能しません。結局のところ、IPython が を使用してロードする Raphael.js は、jQuery.getScript()
require.js の存在を認識し、それ自体をグローバル名前空間に挿入しません。実際、window.define
オブジェクトを削除する JavaScript コードを最初に実行すると、Raphael は require.js が存在することに気付かず、私が望むようにそれ自体をグローバル名前空間に挿入します。つまり、上記のコードは、次を実行した後に機能します。
Javascript('window.define = undefined;')
したがって、最近のバージョンの IPython ノートブックに Raphael をロードさせる唯一の方法は、削除 (または脇に置く) ことwindow.define
です。
問題を特定したので、require.js に精通していないため、どのソフトウェアがプロトコルに対して動作しているかを知ることができません。Raphael は、require.js の存在をテストする方法が不十分ですか? jQuery.getScript()
IPython は、ユーザー提供の JavaScript ライブラリをロードする代わりに、require.js を直接使用する必要がありますか? Raphael
または、特別なハックを必要とせずにオブジェクトを提供する、ユーザーがrequire.jsを受け入れる必要がある方法はありますか? (最後の質問に対する答えが「はい」の場合、require.js を使用しない古いバージョンの IPython ノートブックもサポートする方法はありますか?)