JS 书签在 IE11 中不起作用

Posted

技术标签:

【中文标题】JS 书签在 IE11 中不起作用【英文标题】:JS Bookmarklet Not Working in IE11 【发布时间】:2014-09-07 10:16:28 【问题描述】:

潜伏已久,第一次发帖。

基本情况如下:

受this blog post 的启发,我正在尝试为我们的 QA 团队创建一个书签,以快速填充表单。

书签在我的机器 (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>

第二个,基于*** 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 文件未列在开发人员工具的文件列表中。小书签似乎根本没有触发。

当我右键单击 > 属性时,这些书签中的任何一个都没有 Web 文档选项卡,但是,我提供给它们的一个简单的 javascript 警报书签确实有 Web 文档选项卡,并且它在所有浏览器(包括 IE 11)中都能完美运行.

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

我通过在 Codepen 中编写 html 来交付小书签,通过电子邮件向他们发送指向 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 书签的方式上是否有什么特殊之处,我需要考虑代码?

提前感谢您的宝贵时间!

【问题讨论】:

【参考方案1】:

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

似乎有很多人抱怨小书签在 IE11 中无法正常工作。我要测试的一件事是 IE11 如何处理同源策略。 Check out this link,看看能不能暂时禁用同源策略。然后测试。

显然它不会解决问题,但它可以引导你走向正确的方向。

希望能有所帮助。告诉我。

【讨论】:

不幸的是,仍然一无所获。我将浏览器设置为允许跨域访问数据,允许第 3 方 cookie 会话支持,并尝试了其他一些设置,希望可以解决问题,包括将允许设置为几个拖放设置,以防出现问题将链接从 Codepen 输出窗口拖到收藏夹栏。没有任何效果。 哇。好的。我会留意任何与 IE11 相关的内容。抱歉,没有一个简单的答案。 黑暗中的另一张照片。我正在使用没有协议的链接,因此它们默认为页面。 IE。 //ajax.googleapis.com,在前面加http://有用吗? 抱歉,因为我没有运行 IE11,所以无法自己测试。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

以上是关于JS 书签在 IE11 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

从 JavaScript 添加到浏览器收藏夹/书签,但适用于所有浏览器(我的在 Chrome 中不起作用)?

Onclick功能在IE 11中不起作用

拖放到文件输入在 IE11 中不起作用

flex 属性在 IE 中不起作用

自定义鼠标指针在 IE11 中不起作用

设置自定义样式属性在 IE11 中不起作用