2

如果它们尚不存在,我需要通过 java-script 将一些依赖 java-scripts 加载到页面上。这是通过检查是否定义了变量来完成的,如果没有定义,则生成一个脚本元素并将其添加到页面的头部。

它按照我在 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 上。它也适用于铬。在 IE/FF 上,您将导航到带有<body>[object HTMLScriptElement]</body>正文内容的新页面。

我很困惑为什么它对第二个链接的行为不同,并且正在寻找解决方案。

仅供参考:这需要在 url 中执行的原因是因为我实际上是使用 getURL() 在 AS2 SWF 中调用它,并且我无法更改页面 html 以包含必要的 java 脚本。

4

2 回答 2

1

只需添加

return false;

在 href 属性中的代码末尾,它将取消锚点默认行为,该行为将导航到其他 URL

于 2013-06-24T22:31:34.380 回答
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

于 2013-06-25T14:03:36.357 回答