Saya baru saja memperhatikan bahwa URL Facebook yang panjang dan berbelit-belit yang biasa kita gunakan sekarang terlihat seperti ini:
http://www.facebook.com/example.profile#!/pages/Another-Page/123456789012345
Sejauh yang saya ingat, awal tahun ini hanya string normal seperti URL-fragmen (dimulai dengan #
), tanpa tanda seru. Tapi sekarang ini shebang atau hashbang ( #!
), yang sebelumnya hanya saya lihat di skrip shell dan skrip Perl.
The Twitter baru URL kini juga fitur #!
simbol. URL profil Twitter, misalnya, sekarang terlihat seperti ini:
http://twitter.com/#!/BoltClock
Apakah #!
sekarang memainkan beberapa peran khusus dalam URL, seperti untuk kerangka kerja Ajax tertentu atau sesuatu karena antarmuka Facebook dan Twitter baru sekarang sebagian besar Ajaxified?
Apakah menggunakan ini di URL saya akan menguntungkan aplikasi Web saya dengan cara apa pun?
shebang
yang ... en.wikipedia.org/wiki/Shebang_%28Unix%29Jawaban:
Teknik ini sekarang sudah usang .
Ini digunakan untuk memberi tahu Google cara mengindeks halaman.
https://developers.google.com/webmasters/ajax-crawling/
Teknik ini sebagian besar telah digantikan oleh kemampuan untuk menggunakan JavaScript History API yang diperkenalkan bersama HTML5. Untuk URL seperti
www.example.com/ajax.html#!key=value
, Google akan memeriksa URLwww.example.com/ajax.html?_escaped_fragment_=key=value
untuk mengambil versi konten yang bukan AJAX.sumber
Octothorpe / number-sign / hashmark memiliki arti khusus dalam URL, biasanya mengidentifikasi nama bagian dari dokumen. Istilah yang tepat adalah teks yang mengikuti hash adalah jangkar bagian dari URL. Jika Anda menggunakan Wikipedia, Anda akan melihat bahwa sebagian besar halaman memiliki daftar isi dan Anda dapat melompat ke bagian dalam dokumen dengan jangkar, seperti:
https://en.wikipedia.org/wiki/Alan_Turing#Early_computers_and_the_Turing_test
https://en.wikipedia.org/wiki/Alan_Turing
mengidentifikasi halaman danEarly_computers_and_the_Turing_test
jangkar. Alasan Facebook dan aplikasi lain yang digerakkan oleh Javascript (seperti Wood & Stones saya sendiri ) menggunakan jangkar adalah mereka ingin membuat halaman dapat di-bookmark (seperti yang disarankan oleh komentar pada jawaban itu) atau mendukung tombol kembali tanpa memuat ulang seluruh halaman dari server .Untuk mendukung bookmark dan tombol kembali, Anda perlu mengubah URL. Namun, jika Anda mengubah bagian halaman (dengan sesuatu seperti
window.location = 'http://raganwald.com';
) ke URL yang berbeda atau tanpa menentukan jangkar, browser akan memuat seluruh halaman dari URL. Coba ini di Firebug atau konsol Javascript Safari. Muathttp://minimal-github.gilesb.com/raganwald
. Sekarang di konsol Javascript, ketik:Anda akan melihat refresh halaman dari server. Sekarang ketik:
Aha! Tidak ada penyegaran halaman! Tipe:
Masih tidak ada penyegaran. Gunakan tombol kembali untuk melihat bahwa URL ini ada dalam riwayat peramban. Peramban memperhatikan bahwa kami berada di halaman yang sama tetapi hanya mengubah jangkar, sehingga tidak memuat ulang. Berkat perilaku ini, kami dapat memiliki satu aplikasi Javascript yang tampaknya peramban berada di satu 'halaman' tetapi memiliki banyak bagian yang dapat di-bookmark yang menghormati tombol kembali. Aplikasi harus mengubah jangkar ketika pengguna memasukkan 'negara' yang berbeda, dan juga jika pengguna menggunakan tombol kembali atau bookmark atau tautan untuk memuat aplikasi dengan jangkar termasuk, aplikasi harus mengembalikan keadaan yang sesuai.
Jadi begitulah: Jangkar memberikan programmer Javascript dengan mekanisme untuk membuat aplikasi bookmarkable, indexable, dan ramah tombol kembali. Teknik ini memiliki nama: Ini adalah Single Page Interface .
ps Ada manfaat keempat untuk teknik ini: Memuat konten halaman melalui AJAX dan kemudian menyuntikkannya ke DOM saat ini bisa jauh lebih cepat daripada memuat halaman baru. Selain peningkatan kecepatan, trik lebih lanjut seperti memuat bagian-bagian tertentu di latar belakang dapat dilakukan di bawah kendali programmer.
pps Dengan semua itu, tanda 'letusan' atau tanda seru adalah petunjuk lebih lanjut untuk perayap web Google bahwa laman yang persis sama dapat dimuat dari server dengan URL yang sedikit berbeda. Lihat Ajax Crawling . Teknik lain adalah membuat setiap titik tautan ke URL yang dapat diakses server dan kemudian menggunakan Javascript yang tidak mencolok untuk mengubahnya menjadi SPI dengan jangkar.
Inilah tautan utama lagi: Manifes Antarmuka Halaman Tunggal
sumber
self.document.location.hash
memberikan nilai hash ini#!
aspek pertanyaan saya sama sekali . Itu sebabnya dia bilang itu berlebihan. Jumlah upvotes di sini kemungkinan karena lalu lintas tinggi ketika pertanyaan saya sampai ke Hacker News ditambah dengan panjang semata-mata dari jawaban ini.Pertama-tama: Saya penulis The Single Page Interface Manifesto yang dikutip oleh raganwald
Seperti yang dijelaskan raganwald dengan sangat baik, aspek terpenting dari pendekatan Single Page Interface (SPI) yang digunakan dalam FaceBook dan Twitter adalah penggunaan hash
#
dalam URL.Karakter
!
ditambahkan hanya untuk tujuan Google, notasi ini adalah "standar" Google untuk merayapi situs web intensif di AJAX (di situs web Antarmuka Halaman Tunggal ekstrim). Ketika perayap Google menemukan URL dengan#!
itu tahu bahwa URL konvensional alternatif ada memberikan halaman "negara" yang sama tetapi dalam kasus ini pada waktu buka.Meskipun
#!
kombinasi sangat menarik untuk SEO, hanya didukung oleh Google (sejauh yang saya tahu), dengan beberapa trik JavaScript Anda dapat membangun situs web SPI SEO yang kompatibel untuk perayap web apa pun (Yahoo, Bing ...).Manifesto dan demo SPI tidak menggunakan format
!
hash Google, notasi ini dapat dengan mudah ditambahkan dan perayapan SPI bahkan lebih mudah (PEMBARUAN: sekarang! Notasi digunakan dan tetap kompatibel dengan mesin pencari lainnya).Lihatlah tutorial ini , adalah contoh dari situs ItsNat SPI sederhana tetapi Anda dapat memilih beberapa ide untuk kerangka kerja lain, contoh ini kompatibel dengan SEO untuk perayap web apa pun.
Masalahnya adalah membuat (atau memilih) "keadaan halaman AJAX" apa pun sebagai HTML biasa untuk SEO, di ItsNat sangat mudah dan otomatis, situs yang sama dalam SPI yang sama atau halaman yang berbasis SEO (atau ketika JavaScript dinonaktifkan) untuk aksesibilitas). Dengan kerangka kerja web lain Anda bisa mengikuti pendekatan situs ganda, satu situs berbasis SPI dan halaman lain berbasis SEO, misalnya Twitter menggunakan teknik "situs ganda" ini.
sumber
Saya akan sangat berhati-hati jika Anda mempertimbangkan untuk mengadopsi konvensi hashbang ini.
Anda benar-benar ingin menggunakan pushState alih-alih hashbangs , karena membuat URL Anda jelek dan mungkin rusak - selamanya - adalah kerugian besar dan permanen untuk hashbangs.
sumber
/blah#foo/feep/baz?stuff=nonsense
. Setara jalur baru akan menjadi/blah/foo/feep/baz?stuff=nonsense
(catatan # digantikan oleh /). Saya melakukan itu hanya dengan memiliki rute di setup saya yang menangkap/blah
dan memeriksa apakah itu memiliki, jika demikian, menambahkan konten hash setelah slash. Menyelamatkan.Untuk memiliki tindak lanjut yang baik tentang semua ini, Twitter - salah satu pelopor dari URL hashbang dan antarmuka satu halaman - mengakui bahwa sistem hashbang lambat dalam jangka panjang dan bahwa mereka sebenarnya sudah mulai membalikkan keputusan dan kembali ke tautan sekolah lama.
Artikel tentang ini ada di sini.
sumber
Saya selalu mengasumsikan
!
hanya menunjukkan bahwa fragmen hash yang diikuti sesuai dengan URL, dengan!
menggantikan root situs atau domain. Secara teori, ini bisa berupa apa saja, tetapi tampaknya Google AJAX Crawling API menyukainya dengan cara ini.Hash, tentu saja, hanya menunjukkan bahwa tidak ada reload halaman nyata yang terjadi, jadi ya, itu untuk keperluan AJAX. Sunting: Raganwald melakukan pekerjaan yang bagus untuk menjelaskan hal ini secara lebih rinci.
sumber
Jawaban di atas menjelaskan dengan baik mengapa dan bagaimana digunakan di twitter dan facebook, apa yang saya lewatkan adalah penjelasan apa yang
#
dilakukan secara default ...Pada 'normal' (bukan aplikasi halaman tunggal), Anda dapat melakukan anchoring dengan
hash
elemen apa pun yang memiliki id dengan menempatkan elemen id itu di url setelah hash#
Contoh:
(di Chrome) Klik F12atau Rihgt Mousedan
Inspect element
lalu ambil
id="answer-10831233"
dan tambahkan ke url seperti berikut/programming/3009380/whats-the-shebang-hashbang-in-facebook-and-new-twitter-urls-for#answer-10831233
dan Anda akan mendapatkan tautan yang melompat ke elemen itu di laman
Untuk apa shebang / hashbang (#!) Di Facebook dan URL Twitter baru?
Dengan menggunakan
#
dengan cara yang dijelaskan dalam jawaban di atas Anda memperkenalkan perilaku yang bertentangan ... meskipun saya tidak akan kehilangan tidur ... karena Angular itu menjadi agak standar ....sumber