51福利社

Skip Navigation
cript> (function() { if ( typeof abtpTests === 'undefined' || ! abtpTests.length ) return; function applyChange( el, change ) { switch ( change.type ) { case 'text': if ( change.content !== undefined ) el.textContent = change.content; break; case 'html': if ( change.content !== undefined ) el.innerHTML = change.content; break; case 'style': var styles = change.styles || {}; Object.keys( styles ).forEach( function( prop ) { var cssProp = prop.replace( /([A-Z])/g, '-$1' ).toLowerCase(); el.style.setProperty( cssProp, styles[ prop ], 'important' ); } ); break; case 'visibility': el.style.setProperty( 'display', change.visible ? '' : 'none', 'important' ); break; case 'image': if ( change.src ) { if ( change.imageMode === 'bg' ) { el.style.setProperty( 'background-image', 'url(' + change.src + ')', 'important' ); if ( change.bgPosition ) { el.style.setProperty( 'background-position', change.bgPosition, 'important' ); } } else if ( change.imageMode === 'src' || el.tagName === 'IMG' ) { el.src = change.src; el.removeAttribute( 'srcset' ); el.removeAttribute( 'sizes' ); } else { var childImg = el.querySelector( 'img' ); if ( childImg ) { childImg.src = change.src; childImg.removeAttribute( 'srcset' ); childImg.removeAttribute( 'sizes' ); } else { el.style.setProperty( 'background-image', 'url(' + change.src + ')', 'important' ); } } } break; } } function attachConversionGoal( test ) { if ( ! test.conversion_goal ) return; document.addEventListener( 'click', function( e ) { try { if ( ! ( e.target.matches( test.conversion_goal ) || e.target.closest( test.conversion_goal ) ) ) return; } catch(err) { return; } if ( sessionStorage.getItem( 'abtp_cv_' + test.id ) ) return; sessionStorage.setItem( 'abtp_cv_' + test.id, '1' ); var xhr = new XMLHttpRequest(); xhr.open( 'POST', '/wp-admin/admin-ajax.php', true ); xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' ); var cvData = 'action=abtp_track_conversion&test_id=' + test.id + '&variant_id=' + test.variant + '&nonce=' + encodeURIComponent( abtpNonce ); xhr.send( cvData ); } ); } function applyTest( test ) { // Control visitors: no DOM changes, but still need conversion tracking. if ( test.variant !== 'variant' ) { attachConversionGoal( test ); return true; } if ( ! test.variants || ! test.variants[1] ) return true; var v1 = test.variants[1]; // New format: changes array if ( v1.changes && v1.changes.length ) { var allFound = true; v1.changes.forEach( function( change ) { var el = document.querySelectorAll( change.selector )[ change.selectorIndex || 0 ]; if ( ! el ) { allFound = false; return; } applyChange( el, change ); } ); attachConversionGoal( test ); return allFound; } // Legacy format: single change var selector = test.variants[0] && test.variants[0].selector; if ( ! selector ) return true; var el = document.querySelector( selector ); if ( ! el ) return false; applyChange( el, Object.assign( { type: test.type }, v1 ) ); attachConversionGoal( test ); return true; } function runAll() { var pending = abtpTests.filter( function( t ) { return ! applyTest( t ); } ); if ( ! pending.length ) return; var retries = 0; var interval = setInterval( function() { pending = pending.filter( function( t ) { return ! applyTest( t ); } ); if ( ! pending.length || ++retries >= 20 ) clearInterval( interval ); }, 250 ); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', runAll ); } else { runAll(); } window.addEventListener( 'load', runAll ); })();