Pinterest 发布在 inappbrowser 中不起作用

Pinterest posting not working inside inappbrowser

我正在尝试 post 使用 inappbrowser 将一些文本和图像发送到 Pinterest,但它抛出错误 "Parameter 'image_url' (value http:null) is not a valid URL format."

这是示例代码。

var pinterestUrl = "http://www.pinterest.com/pin/create/button/";
     pinterestUrl += "?url=https://www.google.co.in/";
     pinterestUrl += "&media=http://www.google.co.ma/images/srpr/logo1w.png";
     pinterestUrl += "&description=Text Description";   
var pinterest = window.open(pinterestUrl, '_blank');

如果我将代码从“_blank”更改为“_system”,它在网络浏览器和系统浏览器 (iPhone/Android) 中工作正常。我尝试使用 eventListener "loadstart" 检查 url,发现 inappbrowser 会自动添加一些不必要的额外参数,例如 "create next button".

任何建议都会有所帮助。

根据我们在评论中的对话,我认为问题出在没有对您的查询参数进行编码。 encodeURIComponent 方法用于在查询中使用时对特殊字符进行编码。编码整个 url 将不起作用,因为所有特殊字符都将被编码。您应该只对查询参数值本身进行编码。

var pinterestUrl = "http://www.pinterest.com/pin/create/button/";
pinterestUrl += "?url=" + encodeURIComponent("https://www.google.co.in/");
pinterestUrl += "&media=" + encodeURIComponent("http://www.google.co.ma/images/srpr/logo1w.png");
pinterestUrl += "&description=" + encodeURIComponent("Text Description");   
var pinterest = window.open(pinterestUrl, '_blank');

这是另一种写同样东西的方法,可能更容易阅读。

function buildUrl(baseUrl, queryParams) {
    return Object.keys(queryParams).reduce(function(url, key) {
        return key + '=' + encodeURIComponent(queryParams[key]);
    }, baseUrl + '?');
}

function shareToPinterest() {
    var queryParams = {
        url: "https://www.google.co.in/",
        media: "http://www.google.co.ma/images/srpr/logo1w.png",
        description: "Text Description"
    };
    var pinterestUrl = buildUrl("http://www.pinterest.com/pin/create/button/", queryParams);
    var pinterest = window.open(pinterestUrl, '_blank');
}