JS Bookmarklet在IE11中不起作用

时间:2014-07-16 18:44:39

标签: javascript bookmarklet internet-explorer-11

长时间潜伏,第一次海报。

基础是:

this blog post的启发,我正在尝试为我们的质量检查小组创建一个书签,以快速填充表单。

在我的计算机(TM)Chrome,IE 10和IE 9兼容模式下,书签完美运行。我已经在QA团队的机器上测试了书签,虽然它在Chrome浏览器和IE 9上运行良好,但书签在两台运行IE 11的机器上都不起作用。

详细信息:

在运行IE 11的两台机器中,一台在Win 7上,另一台在Win 8.1上。在Win 7上运行IE 11的机器更新为IE 11.0.9600.17207IS,并且还将在Chrome中正确运行书签。

我尝试了几种不同的变体,第一种是基于上面提到的CSS-Tricks博客文章。

<a href="javascript:
    (function(d) {
        var body = d.getElementsByTagName('body').item(0);
        var script = d.createElement('script');
        script.src = 'https://company.siteurl.com/unrelated/DisclosureRegister.js';
        body.appendChild(script);
    }(window.document));
    alert('Bookmarklet js fired!');">Disclosure Register Bookmarklet</a>

第二个基于StackOverflow Response,如下:

<a href="javascript:
    (function(){
        var s=document.createElement('script');
        s.type='text/javascript';    
        s.src='https://company.siteurl.com/unrelated/DisclosureRegister.js';
        document.getElementsByTagName('head')[0].appendChild(s);
    }());">Disclosure Register 2</a>

这两个代码都可以在我之前提到的浏览器中运行,在其他机器上的IE 11中都不起作用(我没有IE 11,不能直接在我的机器上测试)。

我在开发人员工具的控制台中没有收到任何错误消息,并且DisclosureRegister.js文件未列在开发人员工具的文件列表中。似乎小书签没有被解雇。

当我右键单击&gt;时,这些书签中的任何一个都没有Web文档选项卡。但是,我提供的一个简单的javascript警报bookmarklet确实有Web Documents选项卡,它在所有浏览器(包括IE 11)中都能很好地工作。

<a href="javascript:alert('That tickles!');">Click me!</a>

我通过在Codepen中编写html来发送bookmarklet,通过电子邮件向他们发送指向Codepen的直接链接(我没有足够的信誉点来发布链接),并让他们从Codepen 输出到他们的浏览器收藏栏。

我遇到的东西让我觉得这是一个旧版IE 11的错误,但使用的IE版本甚至比修复相关错误的版本更新。

以防万一DisclosureRegister.js文件中的内容导致IE 11中止javascript,我也包含了代码:

(function (win, doc, $, undefined) {

    //Don't run if jQuery isn't loaded
    if (typeof window.jQuery === 'undefined') {
        return;
    }

    alert("Script is being called!");

    }(window, window.document, window.jQuery));

问题:

虽然我当然没有排除我的代码错误(当然,如果它是错的,请纠正我),IE 11处理javascript bookmarklet的方式是否有什么特别之处我需要考虑到代码?

提前感谢您的时间!

3 个答案:

答案 0 :(得分:1)

我写了那篇文章。真的很高兴你们发现它很有用。

似乎有很多人抱怨在IE11中bookmarklet无法正常工作。我测试的一件事是IE11如何处理相同的原始策略。 Check out this link,看看您是否可以暂时禁用相同的来源政策。然后测试。

显然它不能解决问题,但它可以引导你朝着正确的方向发展。

希望有所帮助。让我知道。

答案 1 :(得分:1)

我想我发现IE11中的bookmarklet有什么问题。我刚刚在IE11中添加了一个书签,但它还没有工作,所以我开始谷歌搜索并找到了这个页面。然后我在微软自己的网站上找到了书签,他们实际上建议他们使用它并且它有效。然后我决定检查语法是否正确,这是我发现问题的地方。出于某种原因,当IE通过拖放将它添加到工具栏时,它会剪切部分长书签。我试图添加的我的书签是几个括号不是原始的,因此语法不正确。然后我手动复制粘贴的完整代码并开始工作。

答案 2 :(得分:0)

我能够通过从bookmarklet代码中删除所有换行符来解决同样的问题。 IE 11显然不知道如何处理它们。

使用bookmarklet代码中的换行符,将其添加到“收藏夹”后,属性显示一个空白URL,单击它时不会发生任何事情。

删除换行符(运行正则表达式将所有空格折叠为单个空格字符),将其添加到“收藏夹”后,属性会在URL字段中显示正确的javascript,并在单击时正确运行。

我无法找到记录此限制的任何地方。