2015-02-12 2 views
0

Цель: У меня есть небольшой сервис для краткости. Я использую ссылки, созданные с использованием этих сервисов, как часть контента, который я публикую на facebook. Скребок URL-адреса Facebook пытается создать предварительный просмотр, указав URL конечной точки и вытащить релевантную информацию.Выполнение JavaScript перед перенаправлением без ущерба для предварительного просмотра, сгенерированного с помощью facebook URL-скребок

Это прямо сейчас работает, потому что я просто перенаправляю в PHP так, как это указано ниже, не позволяя мне выполнять JS до этого перенаправления. Я хочу узнать, есть ли способ выполнить этот JS.

Что я могу сделать? Хорошо! перенаправление от JS с использованием window.locationlike this solution here...

В чем проблема? Если я это сделаю, скребок URL-адреса Facebook больше не сможет найти конечный URL-адрес получателя, что приведет к пустому просмотру моего сайта (в частности, страницы, на которой выполняется JS), вместо целевого сайта. Выполнение JS является обязательным, поэтому нельзя опустить это.

Вопрос: Есть ли способ, что я могу выполнить какую-нибудь JavaScript, прежде чем я сделать перенаправление с помощью расположения заголовка и все еще быть в состоянии получить правильные превью для URL-адресов?

Код ссылки - в Laravel контроллер

if($row->save()){ 
    //i was first doing this and doing a redirect from the view. 
    //return View::make('pages/redirect')->with('originalUrl',$row->url); 

    //but then i realized it wasn't fetching the previews. So i do this now. 
    return Redirect::to($row->url); 
    //assuming it internally uses php's header location. I want to use the JS before this redirect.         
} 
+0

нет напрямую. если вы выведете заголовок местоположения, тогда нет никакой гарантии, что остальная часть страницы будет отображаться или какой-либо код будет выполнен. вам придется прибегнуть к старым школьным методам. '' перенаправления, тайм-ауты javascript и т. Д. –

+0

, но даже со старыми методами школы facebook не сможет найти исходное место для генерации предварительных просмотров. не так ли? Я думал о многом, но ничего не помогает. –

+1

Вы пытались поставить скрипт после местоположения заголовка? Связанный: [Будет ли все код после заголовка перенаправления в PHP всегда выполняться?] (Http://stackoverflow.com/q/7246649/2033671) –

ответ

0

Я опробовал идею я упомянул в комментариях.

Похоже, что это работает.

<?php 
if (strpos($_SERVER["HTTP_USER_AGENT"], "facebookexternalhit") !== false) { 
    // this is the facebook crawler 
    header('location: http://stackoverflow.com/'); 
} 
else { 
    // other clients 
    echo ' 
    <script> 
    window.location = "http://stackoverflow.com/" 
    </script> 
    Hello World 
    '; 
} 
?> 
+0

Я обязательно попробую сегодня! –

0

У меня, наконец, возникла проблема, следуя тому, что @Austin упомянул в комментариях.

Я поместил скрипт после утверждения заголовка в представлении и возвратил этот вид с контроллера. Таким образом, скребок facebook обнаружил как мой скрипт, так и контент с целевого URL в виде объединенной разметки (как видно из отладки url facebook)

Я нахожу это немного забавным и странным, но он работает! : D

Смежные вопросы