【问题标题】:Adding Instagram into Tweetdeck将 Instagram 添加到 Tweetdeck
【发布时间】:2015-07-01 08:15:39
【问题描述】:

我终于厌倦了 Tweetdeck 以及它无法从 Instagram 加载图像。所以我决定使用 Chrome 扩展来解决这个问题。这是一件相当困难的事情,因为 Tweetdeck 有非常严格的内容安全政策。但是我找到了解决方法。

使用Instagram embedding code我们可以提取图像的ID,并根据ID形成一个新的图像。这是指向实际图像的 301 重定向的链接。但是,当我尝试在 Tweetdeck 上运行它时,会出现一个随机透明的 .png。这会导致此错误:

Refused to load the image 'http://images.instagram.com/transparent.gif' because it violates the following Content Security Policy directive: "img-src https: data:".

我似乎找不到这个 png 的来源,我的应用程序和 Instagram 都没有加载它。它破坏了其他一切并导致 301 重定向被取消。

任何帮助将不胜感激。

清单

{
  "manifest_version": 2,
  "name": "Instagram for TweetDeck",
  "description": "This extension will show thumbnails for instagram on TweetDeck",
  "version": "1.0",
  "content_security_policy": "script-src 'self'; object-src 'self'; img-src http: https: data:",
  "content_scripts": [
     {
       "matches": ["https://tweetdeck.twitter.com/"],
       "js": ["instagram_tweetdeck.js"]
     }
  ]
}

JS 文件

var func = function () {

var Instagram = function () {
    this.links = [];
};

Instagram.prototype.add = function (url, element) {

    if (this.links.indexOf(url) !== -1) {
        // already done this link
        return;
    }
    this.links.push(url);

    var id = url.substr(url.indexOf('/p/')).replace('/p/', '').replace('/', '');

    obj = document.createElement('img');
    obj.src = 'https://instagram.com/p/' + id + '/media/?size=m';
    obj.width = "230";
    obj.style.marginTop = "10px";
    element.parentNode.insertBefore(obj, element);
};


var instagram = new Instagram();

var poll = function () {
    var nodes = document.getElementsByTagName('a');
    for (var i = 0; i < nodes.length; i++) {
        if (nodes[i].innerHTML.indexOf('instagram.com') !== -1) {
            instagram.add(nodes[i].innerHTML, nodes[i]);
        }
    }
};

setInterval(poll, 500);
};

var script = document.createElement("script");
script.textContent = "(" + func.toString() + ")();";
document.body.appendChild(script);

【问题讨论】:

    标签: javascript google-chrome twitter google-chrome-extension instagram-api


    【解决方案1】:

    尝试添加您的manifest.json

    "permissions": [
        "*://*.instagram.com",
        "*://*.twitter.com"
    ],
    

    来自XHR的Chrome扩展文档:

    请求跨域权限

    通过向清单文件的权限部分添加主机或主机匹配模式(或两者),扩展程序可以请求访问其源之外的远程服务器。

    有用的链接

    编辑:确保以正确的方式执行脚本,请参阅here 了解更多详细信息。

    【讨论】:

    • 感谢@dgil,但是 tweetdeck 网页执行了相当多的脚本内容安全策略,并且清单不会覆盖它,是吗?
    • @dtsn 是的,确实如此。 chrome 扩展的清单允许您覆盖页面的设置。看看这个答案:stackoverflow.com/a/9776660/1776889
    • @dtsn 我已经更新了我的答案,将链接添加到解释 CORS 权限的文档中。
    • 即使使用更新的清单,我也会收到相同的错误:拒绝加载图像'images.instagram.com/transparent.gif',因为它违反了以下内容安全策略指令:“img-src https:data:”。
    • content_security_policy 不影响内容脚本。有关说明,请参阅 this
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多