2013-06-24 41 views
2

我需要通過java腳本將一些依賴性java腳本加載到頁面上(如果它們尚不存在)。這是通過檢查變量是否被定義來完成的,如果它們沒有生成腳本元素並將其添加到頁面的頭部。如何在錨點href中使用javascript並且不從頁面導航

它以我期望的方式在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> 

如果您查看此頁面,你會發現第二個鏈接實際上載入jQuery和把它放在了DOM。它也適用於Chrome。在IE/FF上,您將導航到<body>[object HTMLScriptElement]</body>作爲正文內容的新頁面。

我很困惑,爲什麼它對第二個鏈接的行爲不同,並且正在尋找解決方案。

供參考:這需要在url中執行的原因是因爲我實際上使用getURL()在AS2 SWF中調用它,並且我無法更改頁面html以包含必需的java腳本。

回答

1

就在你的代碼中href屬性的末尾添加

return false; 

,將取消錨默認行爲,這在導航到其他URL

+0

這確實阻止它進入下一頁,它回答了問題(儘管它仍然沒有將腳本添加到FF和IE的頭上) –

+0

謝謝@MikeMcFarland接受我的回答,儘管事實並非如此lve根本問題 – MaxiWheat

+0

這在ie9中不起作用。最後導航到一個頁面上有一個「假」字樣的頁面。 – stu

0

出於某種原因,包裝這整個事情一個直接的java腳本調用似乎解決了這個問題。

<a href="javascript: (function(){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);}}());"> Works</a> 

奇怪的所以沒有加入警報結束,這使我這個想法,雖然我不明白爲什麼它的工作原理:

<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); alert(js);alert(head);}"> Works but alerts</a> 

編輯:它的工作原理,因爲返回類型的這是在這裏解釋:http://en.wikipedia.org/wiki/Bookmarklet#Concept