当前位置: 首页 > 知识库问答 >
问题:

Javascript 书签在 Firefox 中的 CSP 现场

竺捷
2023-03-14

我有一个简单的 Javascript 书签,我把它放在一起,以针对外部工具运行适当的 GitHub 存储库的内容:

javascript:(function(){ 
    var isApex = false;
    var sourceLangs = document.getElementsByClassName('lang');
        for (var i = 0; i < sourceLangs.length; ++i) {
        var l = sourceLangs[i]; 
        if(l.innerHTML == 'Apex') {
            isApex = true;
            // alert('This is an Apex repo');
        }
    }
    if(location.hostname != 'github.com' || isApex == false) {
        alert('This is not a GitHub Apex repository!');
    }
    else {
         window.open('https://githubsfdeploy.herokuapp.com/app/githubdeploy'+location.pathname);
    }

})();

当我在Chrome或IE中运行它时(通过Daring Fireball的JS bookmarklet生成器运行后),它工作正常。在Firefox中,它会生成内容安全策略错误:

[15:33:19.318] Content Security Policy: Directive inline script base restriction violated @ https://github.com/Groundwire/Campaign-Combiner

我已经阅读了关于这个主题的SE问题,以及关于CSP的github博客文章,其中承认CSP不应该干扰bookmarklets,但当时(2013年4月),“所有浏览器都没有正确的答案。”目前Firefox是否仍然错误,但Chrome

我还找到了一篇关于用户脚本的博客文章

javascript:document.body.appendChild(document.createElement("script")).src="https://raw.github.com/tet3/GitHubInstallerBookmarklet/master/GHIBkmarklet.js";void(0)

但不出所料,这对bookmarklet不起作用,因为调用代码仍然来自浏览器。

简而言之,关于如何在Firefox上使用这个书签,有什么想法吗?

共有3个答案

汪栋
2023-03-14

我已经使用Greasemonkey用户脚本(在Firefox中)为此问题创建了一个变通方法“修复”。现在,您可以在所有 CSP 和 https:// 站点上拥有书签,并将书签放在一个漂亮的、易于编辑的库文件中,而不是单独压缩到书签中。

参见:http://www.donnelly-house.net/programming/js/bookmarklets/bookmarklets.php

慎志国
2023-03-14

作为CSP阻塞bookmarklet的一种变通方法,您可以告诉您的bookmarklet加载一个外部CSS样式表,其中注入您的JS代码。这就是我的顶级新闻订阅书签所做的。看我另一个回答。

经兴安
2023-03-14

我也研究过这个问题,主要是在Firefox中。我不知道它会在Chrome中工作;这可能是最近的变化。除了FF改变识别书签不在策略之外(这是应该的!),没有其他工作。脚本不会运行,句号,你死在水里了。

替代品:

1.)创建一个插件;或利用现有的插件(如Gresemonkey)运行用户脚本。

2.)在web控制台中运行代码。在FF中,CTRL+Shift+K可以让你瞬间到达目的地。

3.)FF的开发者便签本也行。如果您将代码保存在文件中,则可以使用Shift F4(打开草稿栏)相对快速地访问它

 类似资料:
  • 我正试图将我的计算机配置为信任用于测试网站的自签名证书。然而,我在Firefox上遇到了一些问题。Chrome和IE都没问题。 我做了以下几点。 使用OpenSSL创建2048位pem rsa密钥和crt 从密钥和crt文件创建pfx文件 使用MMC将pfx导入到服务器上的个人证书存储中 将IIS配置为使用站点的证书 在客户端PC上 null 我还尝试将证书直接添加到Firefox的权限列表中。它

  • MarkFisher.Local使用了无效的安全证书。证书不是来自受信任的源。错误代码:MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY 我已按此答案中的建议将设置为。此外,转到首选项>隐私与安全>查看证书,我可以看到我的证书在“授权”选项卡中,并且我已经在“编辑信任”对话框中选中了“此证书可以标识网站”。这个原来没有检查 然而,Firefox拒绝接受该证

  • 问题内容: 根据 文档: window_handles 返回当前会话中所有窗口的句柄。 但是,打开新标签页后,我看不到新句柄出现在列表中: 如您所见,具有相同的值,但是我看到在浏览器中打开了2个标签。我做错了什么吗?如果是,应该如何获取新标签的句柄? 使用: selenium2.44.0(最新) Firefox 35.0(最新) python 2.7.6 请注意,如果我要在Chrome中进行类似操

  • 为了在OpenSSL中签名证书,我使用函数,向它提供一个请求(作为)、一个签名密钥和一个摘要。 现在我有我的签名密钥存储在HSM中,所以我无法提取它来签名证书。不幸的是,PKCS#11没有提供的等价物。它只有系列函数,这些函数对原始数据进行操作,而不是对证书进行操作。 有人能帮助我使用示例C/C++代码如何使用PKCS#11签署一个用OpenSSL创建的证书吗?

  • 内容 介绍 对象和属性 例子 API 参考:chrome.bookmarks 方法 create get getChildren getRecent getTree move remove removeTree search update 事件 onChanged onChildrenReordered onCreated onImportBegan onImportEnded onMoved o

  • 问题内容: 在Firefox中解析XmlHttpRequest的HTML结果的最佳方法是什么? 编辑: 我 没有 DOM树,我想获取它。 XmlHttpRequest的“ responseXML”仅在结果是实际XML时才有效,因此我只有responseText可以使用。 innerHTML hack似乎不适用于完整的HTML文档(在 中)。 -结果很好。 问题答案: 应该工作得很好,例如