【问题标题】:jQuery Generated Page vs Social SharejQuery 生成页面与社交分享
【发布时间】:2015-04-28 04:20:34
【问题描述】:

由于业务需求原因,我需要使用jQuery.get() 方法生成内容来填充HTML 页面的内容。现在,包含社交共享的正常方式会产生一个问题,即共享窗口的显示将不包括 jQuery 生成的内容。

页面的网址如http://server/productdetails.html?productid=12345...

这是分享到 Facebook 结束的截图。

有没有办法解决这个问题?

如果有用,这里是页面的代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<script>
    function fbshareCurrentPage() {
        window
                .open(
                        "https://www.facebook.com/sharer/sharer.php?u="
                                + escape(window.location.href) + "&t="
                                + document.title, '',
                        'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=300,width=600');
        return false;
    }

    function display(title, description, sku) {
        $(document).prop('title', title);
        $('#description').html(description);
        $('#sku').html(sku);
    }

    function displayImage(imageUrl) {
        $("#image").attr("src", imageUrl);
    }

    function getURLParametersByName(paramName) {
        var sPageURL = window.location.search.substring(1);
        var sURLVariables = sPageURL.split('&');
        for (var i = 0; i < sURLVariables.length; i++) {
            var sParameterName = sURLVariables[i].split('=');
            if (sParameterName[0] == paramName) {
                return sParameterName[1];
            }
        }
    }

    function fetchProductDetails() {
        var param = getURLParametersByName("productid");
        var title, description, sku;
        $.ajax({
            type : "GET",
            url : "Products?action=loadProductByProductId&productId=" + param,
            contentType : "application/json; charset=utf-8",
            dataType : "json",
            async : true,
            cache : false,
            success : function(data) {
                //console.log(data);
                $.each(data, function(idx, obj) {
                    if (idx == "name") {
                        title = obj;
                    }
                    if (idx == "description") {
                        description = obj;
                    }
                    if (idx == "sku") {
                        sku = obj;
                    }
                });
                display(title, description, sku);
            }
        });
    }

    function fetchProductImage() {
        var param = getURLParametersByName("productid");
        $.ajax({
            type : "GET",
            url : "Products?action=loadProductMainImageByProductId&productId="
                    + param,
            contentType : "application/json; charset=utf-8",
            dataType : "json",
            async : true,
            cache : false,
            success : function(data) {
                //console.log(data);
                displayImage(data);
            }
        });
    }

    function resizeMe() {
        window.resizeTo(400, 240);
    }
</script>
</head>
<body onload="fetchProductDetails();fetchProductImage();">
    <table
        style="width: 480px; margin: auto; border-collapse: separate; border-spacing: 8px">
        <tr>
            <td colspan=2 style="text-align: center"><img
                src="images/blacktea2.png" style="width: 320px" id="image" /></td>
        </tr>
        <tr>
            <td colspan=2 style="width: 320px; text-align: justify"><label
                id="description">Lorem ipsum dolor sit amet, consectetur
                    adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris.
                    Maecenas congue ligula ac quam viverra nec consectetur ante
                    hendrerit. Donec et mollis dolor. Praesent et diam eget libero
                    egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut
                    porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula
                    ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur
                    adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar
                    a semper sed, adipiscing id dolor. Pellentesque auctor nisi id
                    magna consequat sagittis. Curabitur dapibus enim sit amet elit
                    pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero in
                    urna ultrices accumsan. Donec sed odio eros. Donec viverra mi quis
                    quam pulvinar at malesuada arcu rhoncus. Cum sociis natoque
                    penatibus et magnis dis parturient montes, nascetur ridiculus mus.
                    In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis
                    semper ac in est.</label></td>
        </tr>
        <tr>
            <td style="text-align: left">SKU:<label id="sku">99999</label></td>
            <td></td>
        </tr>
        <tr>
            <td style="text-align: left">Register/Login To Buy</td>
            <td style="text-align: right"><a
                href="javascript:fbshareCurrentPage()" target="_blank">Facebook</a></td>
        </tr>
    </table>
</body>
</html>

【问题讨论】:

    标签: javascript jquery html facebook


    【解决方案1】:

    您的问题有两种可能的解决方案。

    1) 在sharer.php url中发送关于页面内容的信息http://www.facebook.com/sharer.php?s=100&p[title]=YOUR_TITLE&p[summary]=YOUR_SUMMARY&p[url]=YOUR_URL&p[images][0]=YOUR_IMAGE_TO_SHARE_OBJECT (参考:https://stackoverflow.com/a/6138879/1741052

    2) 在通过 jquery 填充内容时在页面上使用 Meta 标签,同时在页面上填充 meta 标签。

    <meta property="og:title" content="The Rock"/> 
    <meta property="og:url" content="http://www.imdb.com/title/tt0117500/"/>
    <meta property="og:image" content="http://ia.media-imdb.com/rock.jpg"/>
    

    (参考:https://stackoverflow.com/a/12547228/1741052

    【讨论】:

    • 我尝试了这两种方法,第一种方法只有在访问者点击我的时间轴上的帖子时才能发送正确的响应链接。共享窗口上仍然没有图片、描述和标题显示。第二种方法完全没有运气。
    • @d4v1dv00 尝试使用 FB 调试器 (developers.facebook.com/tools/debug) 调试您网站的任何 URL。看看结果如何?
    • 和以前一样的旧东西。无论如何,我已经放弃并将我的页面更改为服务器端以生成元数据。现在显示的元数据。在 twitter 上工作正常,但 FB 仍然没有获取共享对话框中显示的图像和描述。除了解决 FB 抱怨的 HTTPS 证书之外,它还要求:类型“网站”无效,因为未提供“字符串”类型的必需属性“og:title”。有什么想法吗?
    • @d4v1dv00 你能给你网站的链接吗?这可能会让我更好地了解问题
    • 我想我现在知道为什么了。在我尝试使用ogp.me 中介绍的developers.google.com/structured-data/testing-tool 之后,似乎是因为我的页面是在使用Shiro 的密码保护环境中提供的。所以我所做的就是将jsp页面列入白名单以试试运气。直到那时我才意识到我正在使用 request.getRequestDispatcher("/productdetails.jsp").forward(request, response);我的页面 URL 显示的是 servlet URL 而不是 jsp URL。我无法将 servlet 公开以供 FB 抓取。我知道这是题外话,但一件事导致另一件事......
    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多