依存関係のある Java スクリプトがまだ存在しない場合は、Java スクリプトを使用してページにロードする必要があります。これは、変数が定義されているかどうかを確認することによって行われます。定義されていない場合は、スクリプト要素を生成してページの先頭に追加します。
Chromeで期待どおりに機能します。IE/Firefox の href でコードを直接呼び出すと、新しいウィンドウが開くようです。奇妙なことに、href で間接的に呼び出すと、期待どおりに動作します。これは、動作を示すトリミングされた例です(jqueryをロードしています)
<!DOCTYPE html>
<html>
<head>
<script>
function test(){
if (typeof jQuery == 'undefined') {
var js = document.createElement('script');
js.setAttribute('type','text/javascript');
js.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js');
var head= document.getElementsByTagName('head')[0];
head.appendChild(js);
}
}
</script>
</head>
<body>
<a href="javascript: if (typeof jQuery == 'undefined') {var js = document.createElement('script');js.setAttribute('type','text/javascript');js.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js');var head= document.getElementsByTagName('head')[0];head.appendChild(js);}"> navigates to new page </a>
|
<a href="javascript: test();">executes on page</a>
</body>
</html>
このページを表示すると、2 番目のリンクが実際に jquery をロードして dom に置くことに気付くでしょう。クロムでも動作します。<body>[object HTMLScriptElement]</body>
IE/FFでは、ボディ コンテンツとして新しいページに移動します。
2 番目のリンクで動作が異なる理由について困惑しており、解決策を探しています。
参考までに: これを URL で実行する必要があるのは、実際には getURL() を使用して AS2 SWF 内でこれを呼び出しており、ページの html を変更して必要な Java スクリプトを含めることができないためです。