たいのですがrerender Pinterest(ピンタレスト)"のピンでボタン?
-
27-10-2019 - |
質問
クおよび操作のピンでボタン後のページ負荷時のものです。時に変更したいボタンのある物件jsすrerenderedの機能をピン留めに動的にロードされます。では、Pinterest(ピンタレスト)"がいの方法のようにFacebookのB.XFBML.parse()機能しているのでしょうか。
感謝---
解決
追加するだけです data-pin-build
の属性 SCRIPT
鬼ごっこ:
<script defer
src="//assets.pinterest.com/js/pinit.js"
data-pin-build="parsePinBtns"></script>
それが原因です pinit.js
内部を公開する build
グローバルの機能 window
オブジェクトとして parsePinBtns
関数。
次に、それを使用して、暗黙の要素またはページ上のすべてのリンクのリンクを解析できます。
// parse the whole page
window.parsePinBtns();
// parse links in #pin-it-buttons element only
window.parsePinBtns(document.getElementById('pin-it-buttons'));
ヒント: ゼロカウントを表示するには、追加するだけです data-pin-zero="1"
に SCRIPT
鬼ごっこ。
他のヒント
これを行うための最良の方法:
- 操作したいピンITボタンのiframeを削除します
- 必要に応じて操作する新しいボタンについては、HTMLを追加します
彼らのスクリプトを実現する-JQueryを使用して:
$.ajax({ url: 'http://assets.pinterest.com/js/pinit.js', dataType: 'script', cache:true});
ページが読み込まれた後にピンITボタンをレンダリングするには、次のことができます。
<a href="..pin it link.." id="mybutton" class="pin-it-button" count-layout="none">
<img border="0" src="//assets.pinterest.com/images/PinExt.png" width="43" height="21" title="Pin It" />
</a>
<script>
var element = document.getElementById('mybutton');
(function(x){ for (var n in x) if (n.indexOf('PIN_')==0) return x[n]; return null; })(window).f.render.buttonPin(element);
</script>
もちろんと仮定します assets.pinterest.com/js/pinit.js すでにページにロードされています。レンダリングオブジェクトには、その他の便利な方法がいくつかあります ButtonBookmark, ButtonFollow, ebmedboard, EmbedPin, 埋め込み剤.
Derrekのソリューション(および非宣言されていない変動問題を修正した)の上に構築して、Pinterestボタンを動的にロードできるようにするため、負荷時間を遅くすることはできません。元の質問に接線的にしか関連していませんが、とにかく共有していると思いました。
ドキュメントの最後:
<script type="text/javascript">
addPinterestButton = function (url, media, description) {
var js, href, html, pinJs;
pinJs = '//assets.pinterest.com/js/pinit.js';
//url = escape(url);
url = encodeURIComponent(url);
media = encodeURIComponent(media);
description = encodeURIComponent(description);
href = 'http://pinterest.com/pin/create/button/?url=' + url + '&media=' + media + '&description=' + description;
html = '<a href="' + href + '" class="pin-it-button" count-layout="vertical"><img border="0" src="http://assets.pinterest.com/images/PinExt.png" title="Pin It" /></a>';
$('#pinterestOption').html(html);
//add pinterest js
js = document.createElement('script');
js.src = pinJs;
js.type = 'text/javascript';
document.body.appendChild(js);
}
</script>
ドキュメント対応機能:
addPinterestButton('pageURL', 'img', 'description');//replace with actual data
Pinterestボタンを表示したいドキュメントに、ID PinterEstoptionで要素を追加するだけです。
<div id="pinterestOption"></div>
それが誰かを助けることを願っています!
これが私がしたことです。
最初にPinit.jsを見て、特別にマークされたアンカータグをiframesに置き換えると判断しました。 JavaScriptロジックを作成して、生成されたIFRAMEでSRC属性によって使用されるホスト名を取得できると考えました。
そこで、Pinterestによる通常の推奨事項に従ってマークアップを挿入しましたが、アンカータグをInvisible Divに入れました。
<div id='dummy' style='display:none;'>
<a href="http://pinterest.com/pin/create/button/?
url=http%3A%2F%2Fpage%2Furl
&media=http%3A%2F%2Fimage%2Furl"
class="pin-it-button" count-layout="horizontal"></a>
</div>
<script type="text/javascript" src="//assets.pinterest.com/js/pinit.js">
</script>
その後、その後すぐに、挿入されたiframeからPinterest CDNのホスト名を丸lurpりさせるスクリプトを挿入しました。
//
// pint-reverse.js
//
// logic to reverse-engineer pinterest buttons.
//
// The standard javascript module from pinterest replaces links to
// http://pinterest.com/create/button with links to some odd-looking
// url based at cloudfront.net. It also normalizes the URLs.
//
// Not sure why they went through all the trouble. It does not work for
// a dynamic page where new links get inserted. The pint.js code
// assumes a static page, and is designed to run "once" at page creation
// time.
//
// This module spelunks the changes made by that script and
// attempts to replicate it for dynamically-generated buttons.
//
pinterestOptions = {};
(function(obj){
function spelunkPinterestIframe() {
var iframes = document.getElementsByTagName('iframe'),
k = [], iframe, i, L1 = iframes.length, src, split, L2;
for (i=0; i<L1; i++) {
k.push(iframes[i]);
}
do {
iframe = k.pop();
src = iframe.attributes.getNamedItem('src');
if (src !== null) {
split = src.value.split('/');
L2 = split.length;
obj.host = split[L2 - 2];
obj.script = split[L2 - 1].split('?')[0];
//iframe.parentNode.removeChild(iframe);
}
} while (k.length>0);
}
spelunkPinterestIframe();
}(pinterestOptions));
それで、
function getPinMarkup(photoName, description) {
var loc = document.location,
pathParts = loc.pathname.split('/'),
pageUri = loc.protocol + '//' + loc.hostname + loc.pathname,
href = '/' + pathToImages + photoName,
basePath = (pathParts.length == 3)?'/'+pathParts[1]:'',
mediaUri = loc.protocol+'//'+loc.hostname+basePath+href,
pinMarkup;
description = description || null;
pinMarkup = '<iframe class="pin-it-button" ' + 'scrolling="no" ' +
'src="//' + pinterestOptions.host + '/' + pinterestOptions.script +
'?url=' + encodeURIComponent(pageUri) +
'&media=' + encodeURIComponent(mediaUri);
if (description === null) {
description = 'Insert standard description here';
}
else {
description = 'My site - ' + description;
}
pinMarkup += '&description=' + encodeURIComponent(description);
pinMarkup += '&title=' + encodeURIComponent("Pin this " + tagType);
pinMarkup += '&layout=horizontal&count=1">';
pinMarkup += '</iframe>';
return pinMarkup;
}
そして、次のようにjqueryからそれを使用します:
var pinMarkup = getPinMarkup("snap1.jpg", "Something clever here");
$('#pagePin').empty(); // a div...
$('#pagePin').append(pinMarkup);
fb.xfbml.parse()またはgapi.plusone.go()と同様に、ajaxコンテンツを読み込んだ後のpinterestタグの解析をサポートするPinterestボタンコードを書き直しました。ボーナスとして、プロジェクトの代替JavaScriptファイルは、HTML5-Valid構文をサポートします。
をチェックしてください GithubのPinterestPlusプロジェクト。
これが私がしたことです。AJAXリロードの後、ページ上の複数のPinterestボタンで動作させるために@Derrick Griggのわずかな変更。
refreshPinterestButton = function () {
var url, media, description, pinJs, href, html, newJS, js;
var pin_url;
var pin_buttons = $('div.pin-it a');
pin_buttons.each(function( index ) {
pin_url = index.attr('href');
url = escape(getUrlVars(pin_URL)["url"]);
media = escape(getUrlVars(pin_URL)["media"]);
description = escape(getUrlVars(pin_URL)["description"]);
href = 'http://pinterest.com/pin/create/button/?url=' + url + '&media=' + media + '&description=' + description;
html = '<a href="' + href + '" class="pin-it-button" count-layout="horizontal"><img border="0" src="http://assets.pinterest.com/images/PinExt.png" title="Pin It" /></a>';
index.parent().html(html);
});
//remove and add pinterest js
pinJs = '//assets.pinterest.com/js/pinit.js';
js = $('script[src*="assets.pinterest.com/js/pinit.js"]');
js.remove();
js = document.createElement('script');
js.src = pinJs;
js.type = 'text/javascript';
document.body.appendChild(js);
}
});
function getUrlVars(pin_URL)
{
var vars = [], hash;
var hashes = pin_URL.slice(pin_URL.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
を読んでみてはどうでしこ http://dgrigg.com/blog/2012/04/04/dynamic-pinterest-button/ で少しjavascriptのpinterest(ピンタレスト)"iframe新ボタンを押し、固にpinit.js ファイルです。以下のwebブラウザでjavascriptの実行をん
refreshPinterestButton = function (url, media, description) {
var js, href, html, pinJs;
url = escape(url);
media = escape(media);
description = escape(description);
href = 'http://pinterest.com/pin/create/button/?url=' + url + '&media=' + media + '&description=' + description;
html = '<a href="' + href + '" class="pin-it-button" count-layout="horizontal"><img border="0" src="http://assets.pinterest.com/images/PinExt.png" title="Pin It" /></a>';
$('div.pin-it').html(html);
//remove and add pinterest js
pinJs = $('script[src*="assets.pinterest.com/js/pinit.js"]');
pinJs.remove();
js = document.createElement('script');
js.src = pinJs.attr('src');
js.type = 'text/javascript';
document.body.appendChild(js);
}
彼らの pinit.js ファイル、それらで参照されています 「ピン」ボタンドキュメント, 、グローバルを露出させません。 1回実行され、作成するiframe以外のトレースを残しません。
そのファイルを再度注入して、新しいボタンを「解析」することができます。彼らのJSは、それが実行されたときにすべてのアンカータグを見て、それを置き換えます class="pin-it-button"
iframeのボタンで。
これを行う公式の方法は、スクリプトをロードするときに「データピンビルド」属性を設定することです。
<script defer="defer" src="//assets.pinterest.com/js/pinit.js" data-pin-build="parsePins"></script>
次に、ボタンを動的にレンダリングできます。
// render buttons inside a scoped DOM element
window.parsePins(buttonDomElement);
// render the whole page
window.parsePins();
このサイトには、あなたができる別の方法もあります スクリプトタグなしでそれらをJavaScriptでレンダリングします.
これは私にとってうまく機能します: http://www.mediadevelopment.no/projects/pinit/ クリックイベントのすべてのデータを選択します
私は彼らのコードを同じように動作させるように適応させようとしました(ドロップインしてそれを忘れて)。Pinterest.init()に電話をかけてページに「新しい」ボタンを持つことができます(例:ajax 'din、動的に作成されたなど)は、適切なボタンに変わりました。
計画: https://github.com/onassar/js-pinterest生: https://raw.github.com/onassar/js-pinterest/master/pinterest.js