<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>karalamalar &#187; JavaScript</title>
	<atom:link href="http://www.karalamalar.net/kategori/programlama/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.karalamalar.net</link>
	<description>ortaya kişisel bir şeyler...</description>
	<lastBuildDate>Fri, 13 Jan 2012 18:02:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>&#8220;Could not set the selected property. Unspecified error.&#8221; hatası ve olası çözümü</title>
		<link>http://www.karalamalar.net/could-not-set-the-selected-property-unspecified-error-hatasi-ve-olasi-cozumu/</link>
		<comments>http://www.karalamalar.net/could-not-set-the-selected-property-unspecified-error-hatasi-ve-olasi-cozumu/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 12:42:17 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Option]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[Seçenek]]></category>
		<category><![CDATA[Seçim Kutusu]]></category>
		<category><![CDATA[SelectBox]]></category>
		<category><![CDATA[setTimeout]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=237</guid>
		<description><![CDATA[jQuery kullandığım bir projede, seçim kutusu(select elemanı) seçeneklerini(option) değişkende saklayarak, istediğim zaman istediğim kadar kullanmayı planladım. Daha iyi anlaşılabilmesi için ufak bir kod örneği vereyim; var secenekler = '&#60;option value="34"&#62;İstanbul&#60;/option&#62;&#60;option value="6"&#62;Ankara&#60;/option&#62;&#60;option value="35"&#62;İzmir&#60;/option&#62;'; $('#Baslangic').html(secenekler); $('#Varis').html(secenekler); Buraya kadar bir sorun ortaya çıkmadı. Ne zaman ki, bu şekilde doldurduğum seçim kutularında bir elemanı seçili hale getirmeye çalıştım, işte [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.karalamalar.net/etiket/jquery">jQuery</a> kullandığım bir projede, seçim kutusu(select elemanı) seçeneklerini(option) değişkende saklayarak, istediğim zaman istediğim kadar kullanmayı planladım. Daha iyi anlaşılabilmesi için ufak bir kod örneği vereyim;</p>
<pre class="brush:js">
  var secenekler = '&lt;option value="34"&gt;İstanbul&lt;/option&gt;&lt;option value="6"&gt;Ankara&lt;/option&gt;&lt;option value="35"&gt;İzmir&lt;/option&gt;';
  $('#Baslangic').html(secenekler);
  $('#Varis').html(secenekler);
</pre>
<p>Buraya kadar bir sorun ortaya çıkmadı. Ne zaman ki, bu şekilde doldurduğum seçim kutularında bir elemanı seçili hale getirmeye çalıştım, işte o zaman Internet Explorer 6&#8242;da (IE6) garip bir hata mesajı ile karşılaştım: <strong>&#8220;Could not set the selected property. Unspecified error.&#8221;</strong> IE7, IE8, Firefox, Opera, Chrome ve Safari&#8217;de sorunsuz bir şekilde çalışırken, IE6 bu şekilde, anlaşılmaz bir hata mesajı ile beni çıkmaza soktu. Seçim yapmak için kullandığım kod öbeğini de eklersek kod örneğimiz şu hale geliyor;</p>
<pre class="brush:js">
  var secenekler = '&lt;option value="34"&gt;İstanbul&lt;/option&gt;&lt;option value="6"&gt;Ankara&lt;/option&gt;&lt;option value="35"&gt;İzmir&lt;/option&gt;';
  $('#Baslangic').html(secenekler).val(34);
  $('#Varis').html(secenekler).val(35);
</pre>
<p>Hata mesajının ilk bölümü, kısmen problemin neden kaynaklandığını açıklasa da ikinci bölümdeki &#8220;Belirsiz hata&#8221; ibaresi direkt olarak bir çözüme yönlenmemi engelledi. Internetlerde yaptığım ufak bir araştırma ile <a href="http://csharperimage.jeremylikness.com/2009/05/jquery-ie6-and-could-not-set-selected.html">bu sayfa</a>da probleme ve olası bir çözüme ulaştım. Problem IE6&#8242;da DOM&#8217;un yeteri kadar hızlı çalışamamasından kaynaklanıyormuş. DOM ağacını zamanında hazırlayamadığı için, seçim yapmak istediğimizde seçim kutusunda ilgili elemanı bulamıyor ve ilgili hata mesajını ekrana basıyor.</p>
<p>Problemi çözmek için bir çok alternatif yöntem uygulayabilirsiniz. Problem ile ilgili bilgi bulduğum sayfadaki çözüm, try/catch bloğunu iş akışının bir parçası olarak kullandığından benim gözümde ideal bir çözüm değil. Tabi tercih size kalmış. Benzer bir durum için benim önerebileceğim çözüm şu olabilir;</p>
<pre class="brush:js">
  var secenekler = '&lt;option value="34"&gt;İstanbul&lt;/option&gt;&lt;option value="6"&gt;Ankara&lt;/option&gt;&lt;option value="35"&gt;İzmir&lt;/option&gt;';
  var $Baslangic = $('#Baslangic').html(secenekler);
  var $Varis = $('#Varis').html(secenekler);
  if($.browser.msie &#038;&#038; $.browser.version === "6.0") {
    setTimeout(function() {
      $Baslangic.val(34);
      $Bitis.val(35);
    }, 1);
  }
  else {
    $Baslangic.val(34);
    $Bitis.val(35);
  }
</pre>
<p>İşin püf noktası, tarayıcı IE6 ise, seçim işlemlerini 1 milisaniyelik bir gecikme ile gerçekleştirip, bu ufacık gecikme ile DOM&#8217;a kendini toparyalabilmesi için zaman tanımak.</p>
<p>Alternatif olarak, imkanınız varsa, seçeneklerden seçili olmasını istediğiniz elemana da <strong>selected=&#8221;selected&#8221;</strong> özelliğini atayarak bu hatadan kaçınabilirsiniz. Bu örnekte aynı seçenekleri birden çok kez kullanacağım için ve varsayılan olarak belirli bir tanesini seçili durumda oluşturamayacağım için bu şekilde bir çözüm yoluna gittim.</p>
<div class="shr-publisher-237"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcould-not-set-the-selected-property-unspecified-error-hatasi-ve-olasi-cozumu%2F' data-shr_title='%22Could+not+set+the+selected+property.+Unspecified+error.%22+hatas%C4%B1+ve+olas%C4%B1+%C3%A7%C3%B6z%C3%BCm%C3%BC'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcould-not-set-the-selected-property-unspecified-error-hatasi-ve-olasi-cozumu%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcould-not-set-the-selected-property-unspecified-error-hatasi-ve-olasi-cozumu%2F' data-shr_title='%22Could+not+set+the+selected+property.+Unspecified+error.%22+hatas%C4%B1+ve+olas%C4%B1+%C3%A7%C3%B6z%C3%BCm%C3%BC'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcould-not-set-the-selected-property-unspecified-error-hatasi-ve-olasi-cozumu%2F' data-shr_title='%22Could+not+set+the+selected+property.+Unspecified+error.%22+hatas%C4%B1+ve+olas%C4%B1+%C3%A7%C3%B6z%C3%BCm%C3%BC'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/could-not-set-the-selected-property-unspecified-error-hatasi-ve-olasi-cozumu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript için HTML etiketleri temizleme metodu</title>
		<link>http://www.karalamalar.net/javascript-icin-html-etiketleri-temizleme-metodu/</link>
		<comments>http://www.karalamalar.net/javascript-icin-html-etiketleri-temizleme-metodu/#comments</comments>
		<pubDate>Sun, 16 May 2010 07:57:31 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[etiket temizleme]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Strip Tags]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=234</guid>
		<description><![CDATA[Daha önce bahsettiğim .NET için HTML etiketleri temizleme metodunu JavaScript uygulamalarında kullanmak için düzenledim. Şöyle buyrun: function StripTags(input) { var array = []; var inside = false; for (i = 0; i < input.length; i++) { var let = input.charAt(i); if (let == '') { inside = false; continue; } if (!inside) array.push(let); } return [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Daha önce bahsettiğim <a href="http://www.karalamalar.net/net-icin-html-etiketleri-temizleme-metodu/">.NET için HTML etiketleri temizleme metodu</a>nu JavaScript uygulamalarında kullanmak için düzenledim. Şöyle buyrun:</p>
<pre class="brush:javascript">function StripTags(input)
{
  var array = [];
  var inside = false;

  for (i = 0; i < input.length; i++)
  {
    var let = input.charAt(i);
    if (let == '<')
    {
      inside = true;
      continue;
    }
    if (let == '>')
    {
      inside = false;
      continue;
    }
    if (!inside)
      array.push(let);
  }
  return array.join('');
}</pre>
<div class="shr-publisher-234"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-icin-html-etiketleri-temizleme-metodu%2F' data-shr_title='JavaScript+i%C3%A7in+HTML+etiketleri+temizleme+metodu'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-icin-html-etiketleri-temizleme-metodu%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-icin-html-etiketleri-temizleme-metodu%2F' data-shr_title='JavaScript+i%C3%A7in+HTML+etiketleri+temizleme+metodu'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-icin-html-etiketleri-temizleme-metodu%2F' data-shr_title='JavaScript+i%C3%A7in+HTML+etiketleri+temizleme+metodu'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/javascript-icin-html-etiketleri-temizleme-metodu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>valiDate v2.1</title>
		<link>http://www.karalamalar.net/validate-v2-1/</link>
		<comments>http://www.karalamalar.net/validate-v2-1/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 14:52:06 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[doğrulama]]></category>
		<category><![CDATA[tarih]]></category>
		<category><![CDATA[valiDate]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=230</guid>
		<description><![CDATA[Bugün valiDate metodunu çalışma arkadaşıma gösterirken, neden doğrulama başarılı olduğunda tarih nesnesini döndürmediğim sorusu aklıma geldi. Toplam 7 byte&#8217;lık ufak bir ekleme ile, doğrulama başarılı olduğunda JavaScript tarih nesnesi döndürecek şekilde metodu güncelledim. Bu sayede metottan dönen değeri hala if ifadesi içinde kullanabilirken, isterseniz if ifadesinden önce metottan dönen değeri bir değişkene atayarak, bu değişkeni [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Bugün <a href="http://www.karalamalar.net/validate-v2-0/">valiDate</a> metodunu çalışma arkadaşıma gösterirken, neden doğrulama başarılı olduğunda tarih nesnesini döndürmediğim sorusu aklıma geldi. Toplam 7 byte&#8217;lık ufak bir ekleme ile, doğrulama başarılı olduğunda <strong>JavaScript tarih nesnesi</strong> döndürecek şekilde metodu güncelledim. Bu sayede metottan dönen değeri hala if ifadesi içinde kullanabilirken, isterseniz if ifadesinden önce metottan dönen değeri bir değişkene atayarak, bu değişkeni if ifadesinde kullanabilir ve doğrulamayı geçerse değişkeni tarih nesnesi olarak kullanabilirsiniz. Hatta abartıp doğrulamadan dönen değeri direkt if ifadesi içinde değişkeninize atayarak da kullanabilirsiniz. </p>
<pre class="brush:js">/*
 * valiDate
 * http://www.karalamalar.net/
 *
 * Copyright (c) 2009 İzzet Emre Erkan
 * Licensed under Creative Commons Attribution-Share Alike 3.0 Unported License
 * http://creativecommons.org/licenses/by-sa/3.0/
 *
 * Date: 2010-04-16 17:08:32 +0300 (Fri, 16 Apr 2010)
 * Revision: 7
 */
String.prototype.valiDate =
  function() {
    if(/^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}$/.test(this)) {
      var v = this.replace(/[- /]/g,'.').split('.');
      var d=parseInt(v[0],10), m=parseInt(v[1],10), y=parseInt(v[2],10);
      var o = new Date(y, m - 1, d);
      return o.getDate() == d &#038;&#038; o.getMonth() + 1 == m &#038;&#038; o.getFullYear() == y ? o : false;
    }
    else
      return false;
  }</pre>
<p>Metodun küçültülmüş halini (647 byte) <a href='http://www.karalamalar.net/dosyalar/2010/04/valiDate.zip'>buradan</a> edinebilirsiniz.</p>
<div class="shr-publisher-230"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-v2-1%2F' data-shr_title='valiDate+v2.1'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-v2-1%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-v2-1%2F' data-shr_title='valiDate+v2.1'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-v2-1%2F' data-shr_title='valiDate+v2.1'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/validate-v2-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript kapsam ve kaplamları anlamak</title>
		<link>http://www.karalamalar.net/javascript-kapsam-ve-kaplamlari-anlamak/</link>
		<comments>http://www.karalamalar.net/javascript-kapsam-ve-kaplamlari-anlamak/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 12:49:05 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[Closure]]></category>
		<category><![CDATA[Kaplam]]></category>
		<category><![CDATA[Kapsam]]></category>
		<category><![CDATA[Scope]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=219</guid>
		<description><![CDATA[Bu makalenin orijinali (Explaining JavaScript scope and closures) Robert Nyman tarafından kendi blogunda yazılmıştır. Türkçe çevirisi için kendisinden izin alınmış olup, aşağıda okuyacağınız birinci tekil şahıs yine Robert Nyman&#8217;ın kendisidir; Javascript ile uygulama geliştirirken bir çok insanın zorluk çektiği bir konuyu açıklamaya çalışmak istedim. Arkaplan Kapsam ve kaplamları anlatmaya çalışan bir sürü makale olmasına rağmen [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><blockquote><p>Bu makalenin <a href="http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/">orijinali (Explaining JavaScript scope and closures)</a> Robert Nyman tarafından kendi blogunda yazılmıştır. Türkçe çevirisi için kendisinden izin alınmış olup, aşağıda okuyacağınız birinci tekil şahıs yine Robert Nyman&#8217;ın kendisidir;</p></blockquote>
<p>Javascript ile uygulama geliştirirken bir çok insanın zorluk çektiği bir konuyu açıklamaya çalışmak istedim.<br />
<span id="more-219"></span></p>
<h2>Arkaplan</h2>
<p>Kapsam ve kaplamları anlatmaya çalışan bir sürü makale olmasına rağmen bir çoğunun net bir şekilde konuyu ele almadığını söyleyebilirim. Bunun yanında bir çok makalede de herkesin daha önce 15 başka yazılım dili ile uygulama geliştirdiğini varsayılıyor ki deneyimlerime göre JavaScript yazan bir çok kişi C ve Java yerine HTML ve CSS altyapısından geliyor.</p>
<p>Bu nedenle bu makale ile mütevazi hedefim herkesin kapsam ve kaplamların ne olduğunu kavraması, nasıl çalıştıklarını ve daha önemlisi bunlardan nasıl yararlanabileceklerini görmeleri. Okumaya başlamadan önce değişkenler ve fonksiyonların temellerini anlıyor olmalısınız.</p>
<h2>Kapsam</h2>
<p>Kapsam, değişkenlerin ve fonksiyonların nerede erişilebilir oldukları ve hangi bağlam içinde çalıştırıldıklarını refere eder. Basitçe, bir değişken ya da fonksiyon, genel ya da yerel kapsam içinde tanımlanabilir. Değişkenler sözde fonksiyon kapsamına sahiptirler ve fonksiyonlar da değişkenlerle aynı kapsama sahiptirler.</p>
<h3>Genel Kapsam</h3>
<p>Bir şey genel olduğunda bu demektir ki ona kodunuzda istediğiniz yerden erişebilirsiniz. Şu örneği ele alalım:</p>
<pre class="brush:javascript">var maymun = "Goril";

function misafiriKarsila() {
  return alert("Merhaba değerli blog okuyucusu!");
}</pre>
<p>Bu kod bir tarayıcıda çalıştığında, fonksiyon kapsamı pencere olacaktı, bu da ilgili tarayıcı penceresinde çalışan her şey için fonksiyonu erişilebilir kılacaktı.</p>
<h3>Yerel Kapsam</h3>
<p>Genel kapsamın tersine, yerel kapsam bir şeyin, örneğin bir fonksiyonun, kodun belli bir kısmında tanımlanmış olmasıdır. Örneğin;</p>
<pre class="brush:javascript">function terbiyesizKonus() {
  var konusma = "Oh, seni gidi VB sever seni";
  return alert(konusma);
}
alert(konusma); // Hata fırlatır</pre>
<p>Yukardaki koda bakarsanız konusma değişkeni sadece terbiyesizKonus fonksiyonu içinde erişilebilir durumdadır. Fonksiyonun dışında tanımlı değildir. Buraya dikkat: eğer değişkeni tanımlarken öncesinde var kullanmazsanız, değişken otomatik olarak bir genel değişken olur.</p>
<p>Bu aynı zamanda şu manaya da gelir, iç içe fonksiyonlar tanımladığınızda içerdeki fonksiyon, içinde bulunduğu fonksiyonun değişkenlerine ve fonksiyonlarına erişebilir:</p>
<pre class="brush:javascript">function adSakla(ad) {
  function buyukHarfeCevir() {
    return ad.toUpperCase();
  }
  var buyutulmus = buyukHarfeCevir();
  return buyutulmus;
}
alert(adSakla("Robert")); // "ROBERT" döndürür</pre>
<p>Gördüğünüz gibi, iç fonksiyon buyukHarfeCevir işlem yapmak için herhangi bir parametreye ihtiyaç duymadı fakat dış fonksiyon adSakla&#8217;nın parametresi olan ad parametresine tam erişim sağladı. Daha net anlaşılması için bir örnek daha ele alalım:</p>
<pre class="brush:javascript">function kardesler() {
  var kardesler = ["Mehmet", "Mahmut", "Ayşe"];
  function kardesSayisi() {
    var kardeslerUzunlugu = kardesler.length;
    return kardeslerUzunlugu;
  }
  function kardesIsimleriniBirlestir() {
    return "Benim " + kardesSayisi() + " kardeşim var:\n\n" + kardesler.join("\n");
  }
  return kardesIsimleriniBirlestir();
}
alert(kardesler()); // "Benim 3 kardeşim var: Mehmet Mahmut Ayşe" döndürür</pre>
<p>Az önce gördüğünüz gibi, her iki iç fonksiyon da kendilerini kapsayan fonksiyona ait dizi değişkenine erişebildiler ve her iç fonksiyon kendisiyle aynı seviyedeki diğer iç fonksiyonlara (bu durumda kardesIsimleriniBirlestir fonksiyonu kardesSayisi fonksiyonuna erişti) erişebildi. Ne varki kardeslerUzunlugu değişkeni sadece ilgili fonksiyonda erişilebilir durumda, başka bir deyişle o kapsamda erişilebilir.</p>
<h2>Kaplamlar</h2>
<p>Hazır kapsam konusunu daha iyi kavramışken şimdi karışıma bir de kaplamları ekleyelim. Kaplamlar, genellikle, belirli bir bağlamda değişkenlerle çaışabilen ifadelerdir ya da işi daha da kolaylaştırmak adına, dış fonksiyonların yerel değişkenleri ile işlem yapan iç fonksiyonlar kaplamları oluşturur. Örneğin:</p>
<pre class="brush:javascript">function topla(x) {
  return function(y) {
    return x + y;
  };
}
var topla5 = topla(5);
var sayi8 = topla5(3);
alert(sayi8); // 8 döndürür</pre>
<p>Dur bir dakika! Az önce ne oldu? Şunu parçalarına ayıralım:</p>
<ol>
<li>topla fonksiyonu çağırıldığında geriye bir fonksiyon döndürüyor.</li>
<li>Bu fonksiyon ilgili bağlamı kapatıyor ve x parametresinin o anki değerini hafızasında tutuyor.(Yukardaki örnekte 5 değeri)</li>
<li>topla5 değişkenine değeri atanırken, dönen fonksiyon x değerinin 5 olduğunu hep biliyor.</li>
<li>topla5 değişkeni parametre olarak aldığı değere 5 ekleyen bir fonksiyonu refere eder hale geliyor.</li>
<li>topla5 fonksiyonu 3 parametresi ile çağrıldığında, 5 değerine 3 ekliyor ve 8 değerini dönüyor.</li>
</ol>
<p>Yani JavaScript dünyasında topla5 fonksiyonu aslında şuna benzer:</p>
<pre class="brush:javascript">function topla5 (y) {
  return 5 + y;
}</pre>
<h2>Rezil döngü problemi</h2>
<p>Kaç defa, bir döngü yaratıp, i değerini bir elemana atamaya çalıştığınızda, gördünüz ki sadece i&#8217;nin en son değeri geri dönüyor?</p>
<h3>Yanlış referans</h3>
<p>Şimdi, 5 adet a elemanı yaratıp, i değişkeni ile metinlerini oluşturan ve tıklama olayında da i değerini mesaj kutusu (alert) ile ekrana basan, şu yanlış koda bir bakalım. Oluşan a elemanları dokümanın (document) gövdesine (body) eklenecekler:</p>
<pre class="brush:javascript">function baglantiEkle() {
  for (var i=0, baglanti; i < 5; i++) {
    baglanti = document.createElement("a");
    baglanti.innerHTML = "Bağlantı " + i;
    baglanti.onclick = function () {
      alert(i);
    };
    document.body.appendChild(baglanti);
  }
}
window.onload = baglantiEkle;</pre>
<p>Her eleman  "Bağlantı 0", "Bağlantı 1" vb doğru metinlere sahip olacaklar. Fakat hangi bağlantıya tıklarsanız tıklayın, mesaj kutusunda hep "5" yazacaktır. Peki ama neden? Döngünün her yinelenmesinde i değeri bir artıyor ve tıklama olayı sadece elemana bağlanıyor ama henüz çalıştırılmıyor.</p>
<p>Böylece döngü i değeri 5 olana kadar devam ediyor, ki bu da baglantiEkle fonksiyonu çalışmayı bitirmeden önce i'nin aldığı son değer. Sonrasında da her tıklama olayı gerçekleştiğinde, son i değeri kullanılıyor.</p>
<h3>Doğru referans</h3>
<p>Bunun yerine yapmanız gereken bir kaplam yaratmak, böylece tıklama olayını her bağladığınızda o anki doğru i değeri ile olay çalışır. Şöyle ki:</p>
<pre class="brush:javascript">function baglantiEkle() {
  for (var i=0, baglanti; i < 5; i++) {
    baglanti = document.createElement("a");
    baglanti.innerHTML = "Bağlantı " + i;
    baglanti.onclick = function (numara) {
      return function () {
        alert(numara);
      };
    }(i);
    document.body.appendChild(baglanti);
  }
}
window.onload = baglantiEkle;</pre>
<p>Bu kod ile her a elemanına tıkladığınızda "Bağlantı 0", "Bağlantı 1" gibi ilk kod parçasında olmasını beklediğiniz değerler karşınıza çıkacaktır. Burada çözümü sağlayan, tıklama olayına atanan iç fonksiyon numara değişkenini -bu örnekte parametre olarak geçilen i değişkeninin o andaki değeri- refere eden bir kaplam oluşturmasıdır.</p>
<p>Bu fonksiyon geçerli değer ile kapanıyor ve bu sayede tıklama olayı çağırıldığında olması gereken değeri dönebiliyor.</p>
<h2>Kendi kendini çalıştıran fonksiyonlar</h2>
<p>Kendi kendini çalıştıran fonksiyonlar anında çalışan ve kendi kaplamlarını oluşturan fonksiyonlardır. Şuna bir göz atın:</p>
<pre class="brush:javascript">(function () {
  var kopek = "Alpan Çobanı";
  alert(kopek);
})();
alert(kopek); // undefined (tanımlanmamış) geri döner</pre>
<p>Tamam, demek ki kopek değişkeni sadece o bağlamda uygun durumda. Büyük iş, gizli köpekler... Ama, sevgili arkadaşlarım, işte olayın ilginçleştiği nokta da bu! Biraz önceki döngüde sorunumuzu çözen şey bu. Yahoo da bunu <a href="http://yuiblog.com/blog/2007/06/12/module-pattern/">Yahoo JavaScript Modül Deseni</a> için kullanıyor.</p>
<h2>Yahoo JavaScript Modül Deseni</h2>
<p>Desenin özü şu; Kendi kendini çağıran fonksiyonlar kullanarak bir kaplam yaratıyoruz, bu sayede özel ve genel değişkenler ve metotlar oluşturabiliyoruz. Basit bir örnek:</p>
<pre class="brush:javascript">var kisi = function () {
  // Özel
  var isim = "Robert";
  return {
    ismiGetir : function () {
      return isim;
    },
    ismiBelirle : function (yeniIsim) {
      isim = yeniIsim;
    }
  };
}();
alert(kisi.isim); // undefined
alert(kisi.ismiGetir()); // "Robert"
kisi.ismiBelirle("Robert Nyman");
alert(kisi.ismiGetir()); // "Robert Nyman"</pre>
<p>Bunun güzelliği, artık nelerin genel olarak görüneceğini(ve değiştirilebileceğini), nelerin ise özel olacağını dolayısıyla da kimsenin erişememesine ve değiştirememesine siz karar verebileceksiniz. Yukardaki değişkenin ismi fonksiyonun bağlamı dışında gizlidir, fakat ismiGetir ve ismiBelirle fonksiyonları aynı kaplamda yaratıldıkları için ilgili değişkenin referansına sahiptirler ve kendisine ulaşabilirler.</p>
<h2>Sonuç</h2>
<p>Naçizane umudum, bu yazıyı okuduktan sonra, ister acemi, ister uzman bir programcı olun, JavaScript'deki kapsam ve kaplamlar ile ilgili daha net bir görüş açısı kazanmanızdır. Sorular ve geri beslemelere her zaman açığım ve konuyla ilgili gerçekten önemli her türlü bilgi için makaleyi hemen güncellerim.</p>
<p>Mutlu kodlamalar!</p>
<div class="shr-publisher-219"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-kapsam-ve-kaplamlari-anlamak%2F' data-shr_title='JavaScript+kapsam+ve+kaplamlar%C4%B1+anlamak'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-kapsam-ve-kaplamlari-anlamak%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-kapsam-ve-kaplamlari-anlamak%2F' data-shr_title='JavaScript+kapsam+ve+kaplamlar%C4%B1+anlamak'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-kapsam-ve-kaplamlari-anlamak%2F' data-shr_title='JavaScript+kapsam+ve+kaplamlar%C4%B1+anlamak'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/javascript-kapsam-ve-kaplamlari-anlamak/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>jTopLeft &#8211; Bir elemanın sayfa üzerindeki yerini bulma</title>
		<link>http://www.karalamalar.net/jtopleft-bir-elemanin-sayfa-uzerindeki-yerini-bulma/</link>
		<comments>http://www.karalamalar.net/jtopleft-bir-elemanin-sayfa-uzerindeki-yerini-bulma/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 14:56:17 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[left]]></category>
		<category><![CDATA[position]]></category>
		<category><![CDATA[pozisyon]]></category>
		<category><![CDATA[pozisyon bulma]]></category>
		<category><![CDATA[sol]]></category>
		<category><![CDATA[top]]></category>
		<category><![CDATA[üst]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=215</guid>
		<description><![CDATA[JavaScript ile bir elemanın tarayıcının görüş alanına göre ya da ebeveyni olan diğer bir elemana göre x ve y koordinatlarını belirlemeye yönelik bir betik hazırladım ve jQuery eklentisi haline getirdim. Eklentinin kendisini ve sıkıştırılmış halini aşağıda bulabilirsiniz. Kullanımı: var top = $('#elm').top(); var left = $('#elm').left(); var pos = $('#elm').pos(); top = pos.top; left = [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>JavaScript ile bir elemanın tarayıcının görüş alanına göre ya da ebeveyni olan diğer bir elemana göre x ve y koordinatlarını belirlemeye yönelik bir betik hazırladım ve jQuery eklentisi haline getirdim. Eklentinin kendisini ve sıkıştırılmış halini aşağıda bulabilirsiniz.</p>
<p>Kullanımı:</p>
<pre class="brush:javascript">var top = $('#elm').top();

var left = $('#elm').left();

var pos = $('#elm').pos();
top = pos.top;
left = pos.left;</pre>
<pre class="brush:javascript">/*
 * jTopLeft
 * http://www.karalamalar.net/
 *
 * Copyright (c) 2009 İzzet Emre Erkan
 * Licensed under Creative Commons Attribution-Share Alike 3.0 Unported License
 * http://creativecommons.org/licenses/by-sa/3.0/
 *
 * Date: 2009-10-12 17:56:24 +0300 (Mon, 12 Oct 2009)
 * Revision: 3
 */
(function($){
  $.fn.extend({
    top: function(obj) {
      var o = findPos(this.get(0));
      return obj ? o - findPos(obj) : o;
    },
    left: function(obj) {
      var o = findPos(this.get(0),true);
      return obj ? o - findPos(obj,true) : o;
    },
    pos: function(obj) {
      var pos = {},o;

      o = findPos(this.get(0));
      pos.top = obj ? o - findPos(obj) : o;

      o = findPos(this.get(0),true);
      pos.left = obj ? o - findPos(obj,true) : o;

      return pos;
    }
  });
  function findPos(o,l){
    var x = 0;
    if (o.offsetParent) {
      x = l ? o.offsetLeft : o.offsetTop;
      while (o = o.offsetParent)
        x += l ? o.offsetLeft : o.offsetTop;
    }
    return x;
  }
})(jQuery);</pre>
<p>Paketin küçültülmüş halini (802 byte) <a href='http://www.karalamalar.net/dosyalar/2009/10/jTopLeft.zip'>buradan</a> edinebilirsiniz.</p>
<div class="shr-publisher-215"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjtopleft-bir-elemanin-sayfa-uzerindeki-yerini-bulma%2F' data-shr_title='jTopLeft+-+Bir+eleman%C4%B1n+sayfa+%C3%BCzerindeki+yerini+bulma'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjtopleft-bir-elemanin-sayfa-uzerindeki-yerini-bulma%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjtopleft-bir-elemanin-sayfa-uzerindeki-yerini-bulma%2F' data-shr_title='jTopLeft+-+Bir+eleman%C4%B1n+sayfa+%C3%BCzerindeki+yerini+bulma'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjtopleft-bir-elemanin-sayfa-uzerindeki-yerini-bulma%2F' data-shr_title='jTopLeft+-+Bir+eleman%C4%B1n+sayfa+%C3%BCzerindeki+yerini+bulma'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/jtopleft-bir-elemanin-sayfa-uzerindeki-yerini-bulma/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>strExtensions &#8211; JavaScript için string uzantıları</title>
		<link>http://www.karalamalar.net/strextensions-javascript-icin-string-uzantilari/</link>
		<comments>http://www.karalamalar.net/strextensions-javascript-icin-string-uzantilari/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 06:32:51 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=212</guid>
		<description><![CDATA[JavaScript kullanırken eksikliğini hissettiğim bir kaç string metot var. padLeft, padRight, trimLeft, trimRight ve trim metotları varsayılan string metotları arasında yer almıyor. Zaman içinde çeşitli projelerde bu metotlara ihtiyaç duydukça yazıp yazıp bir kenara koymuştum. Şimdi bu metotları toplayıp ufak bir paket oluşturdum ve sizlerle de paylaşayım dedim. valiDate v2.0&#8216;ı da bu pakete dahil ettim. [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>JavaScript kullanırken eksikliğini hissettiğim bir kaç string metot var. padLeft, padRight, trimLeft, trimRight ve trim metotları varsayılan string metotları arasında yer almıyor. Zaman içinde çeşitli projelerde bu metotlara ihtiyaç duydukça yazıp yazıp bir kenara koymuştum. Şimdi bu metotları toplayıp ufak bir paket oluşturdum ve sizlerle de paylaşayım dedim. <a href="http://www.karalamalar.net/validate-v2-0/">valiDate v2.0</a>&#8216;ı da bu pakete dahil ettim. Metotları aşağıda bulabilirsiniz;</p>
<pre class="brush:javascript">/*
 * strExtensions - String extensions
 * http://www.karalamalar.net/
 *
 * Copyright (c) 2009 İzzet Emre Erkan
 * Licensed under Creative Commons Attribution-Share Alike 3.0 Unported License
 * http://creativecommons.org/licenses/by-sa/3.0/
 *
 * Date: 2009-10-08 17:43:34 +0300 (Thu, 08 Oct 2009)
 * Revision: 2
 */
String.prototype.trimLeft =
  function(c) {
    c = c || ' ';
    return this.replace(new RegExp('^'+c+'+'),"");
  };
String.prototype.trimRight =
  function(c) {
    c = c || ' ';
    return this.replace(new RegExp(''+c+'+$'),"");
  };
String.prototype.trim =
  function(c) {
    return this.trimLeft(c).trimRight(c);
  };
String.prototype.padLeft =
  function(l, c) {
    c = c || ' ';
    var s = this.toString();
    while (s.length < l) s = c + s;
    return s;
  }
String.prototype.padRight =
  function(l, c) {
    c = c || ' ';
    var s = this.toString();
    while (s.length < l) s = s + c;
    return s;
  }
String.prototype.valiDate =
  function() {
    if(/^(0[1-9]|[12][0-9]PO|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}$/.test(this)) {
      var v = this.replace(/[- /]/g,'.').split('.');
      var d=parseInt(v[0],10), m=parseInt(v[1],10), y=parseInt(v[2],10);
      var o = new Date(y, m - 1, d);
      return o.getDate() == d &#038;&#038; o.getMonth() + 1 == m &#038;&#038; o.getFullYear() == y;
    }
    else
      return false;
  }</pre>
<p>Paketin küçültülmüş halini (1130 byte) <a href='http://www.karalamalar.net/dosyalar/2009/10/strExtensions.zip'>buradan edinebilirsiniz.</p>
<div class="shr-publisher-212"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fstrextensions-javascript-icin-string-uzantilari%2F' data-shr_title='strExtensions+-+JavaScript+i%C3%A7in+string+uzant%C4%B1lar%C4%B1'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fstrextensions-javascript-icin-string-uzantilari%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fstrextensions-javascript-icin-string-uzantilari%2F' data-shr_title='strExtensions+-+JavaScript+i%C3%A7in+string+uzant%C4%B1lar%C4%B1'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fstrextensions-javascript-icin-string-uzantilari%2F' data-shr_title='strExtensions+-+JavaScript+i%C3%A7in+string+uzant%C4%B1lar%C4%B1'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/strextensions-javascript-icin-string-uzantilari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>valiDate v2.0</title>
		<link>http://www.karalamalar.net/validate-v2-0/</link>
		<comments>http://www.karalamalar.net/validate-v2-0/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 16:02:07 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[doğrulama]]></category>
		<category><![CDATA[tarih]]></category>
		<category><![CDATA[valiDate]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=210</guid>
		<description><![CDATA[Daha önce ilk versiyonunu sizlerle paylaştığım valiDate metodunu biraz daha geliştirdim. String nesneleri doğrulama amaçlı kullandığım için String nesnesinin prototype&#8217;ına ekleyerek herhangi bir metin değişken üzerinde kolayca tarih doğrulaması yapılabilmesine olanak sağladım. Ayraç olarak &#8220;-&#8221;,&#8221; &#8220;,&#8220;/&#8221; ya da &#8220;.&#8221; karakterlerini kullanıyor, yani doğrulanan metnin ilgili ayraç ile ayrılmış dd.mm.yyyy formatında olmasını bekliyor. /* * valiDate [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Daha önce <a href="http://www.karalamalar.net/validate-javascript-ile-tarih-dogrulama/">ilk versiyonu</a>nu sizlerle paylaştığım <strong>valiDate</strong> metodunu biraz daha geliştirdim. String nesneleri doğrulama amaçlı kullandığım için String nesnesinin prototype&#8217;ına ekleyerek herhangi bir metin değişken üzerinde kolayca tarih doğrulaması yapılabilmesine olanak sağladım. Ayraç olarak <strong>&#8220;-&#8221;</strong>,<strong>&#8221; &#8220;</strong>,<strong>&#8220;/&#8221;</strong> ya da <strong>&#8220;.&#8221;</strong> karakterlerini kullanıyor, yani doğrulanan metnin ilgili ayraç ile ayrılmış <strong>dd.mm.yyyy</strong> formatında olmasını bekliyor.</p>
<pre class="brush:javascript">/*
 * valiDate
 * http://www.karalamalar.net/
 *
 * Copyright (c) 2009 İzzet Emre Erkan
 * Licensed under Creative Commons Attribution-Share Alike 3.0 Unported License
 * http://creativecommons.org/licenses/by-sa/3.0/
 *
 * Date: 2009-10-08 16:51:00 +0300 (Thu, 08 Oct 2009)
 * Revision: 6
 */
String.prototype.valiDate =
  function() {
    if(/^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}$/.test(this)) {
      var v = this.replace(/[- /]/g,'.').split('.');
      var d=parseInt(v[0],10), m=parseInt(v[1],10), y=parseInt(v[2],10);
      var o = new Date(y, m - 1, d);
      return o.getDate() == d &#038;&#038; o.getMonth() + 1 == m &#038;&#038; o.getFullYear() == y;
    }
    else
      return false;
  }</pre>
<p>Metodun küçültülmüş halini (640 byte) <a href='http://www.karalamalar.net/dosyalar/2009/10/valiDate.zip'>buradan</a> edinebilirsiniz.</p>
<div class="shr-publisher-210"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-v2-0%2F' data-shr_title='valiDate+v2.0'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-v2-0%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-v2-0%2F' data-shr_title='valiDate+v2.0'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-v2-0%2F' data-shr_title='valiDate+v2.0'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/validate-v2-0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web geliştiricilerinin işine yarayacak 20 bookmarklet (web aparatı)</title>
		<link>http://www.karalamalar.net/web-gelistiricilerinin-isine-yarayacak-20-bookmarklet-web-aparati/</link>
		<comments>http://www.karalamalar.net/web-gelistiricilerinin-isine-yarayacak-20-bookmarklet-web-aparati/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 12:07:14 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Aparat]]></category>
		<category><![CDATA[Bookmarklet]]></category>
		<category><![CDATA[Liste]]></category>
		<category><![CDATA[Web Aparatı]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=206</guid>
		<description><![CDATA[Webde uygulama geliştirirken genelde Firefox kullanıyorum. Geliştirme sürecinde de diğer tarayıcılarla uygulamayı test edip gereken önlemleri alarak tüm tarayıcılarda aynı sonucu alacak şekilde uygulama geliştirmeye çalışıyorum. Bu süreçte en çok baş ağrıtan tabii ki Internet Explorer oluyor. Bir tarafta test ettiğim dört tarayıcı (Firefox, Chrome, Opera, Safari) diğer tarafta Internet Explorer sürümleri (IE 6, IE [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Webde uygulama geliştirirken genelde <a href="http://www.karalamalar.net/etiket/firefox">Firefox</a> kullanıyorum. Geliştirme sürecinde de diğer tarayıcılarla uygulamayı test edip gereken önlemleri alarak tüm tarayıcılarda aynı sonucu alacak şekilde uygulama geliştirmeye çalışıyorum. Bu süreçte en çok baş ağrıtan tabii ki Internet Explorer oluyor. Bir tarafta test ettiğim dört tarayıcı (Firefox, Chrome, Opera, Safari) diğer tarafta Internet Explorer sürümleri (IE 6, IE 7, IE 8). Sağolsun Microsoft, peşpeşe çıkan iki sürüm bile birbirini tutmadığından ve piyasada kullanım oranları hiçe sayılamayacak düzeyde olduğundan, bir de böyle sancılı bir süreç ortaya çıkıyor.</p>
<p>Geliştirme sürecinde Firefox kullanmak çok büyük rahatlık. <a href="http://www.karalamalar.net/etiket/web_developer_toolbar">Web Developer araç çubuğu</a> ve Firebug neredeyse tüm ihtiyaçları karşılıyor. Diğer tarayıcılarda ise bu iki eklentinin getirdiği rahatlığı yakalayabilmek bir kaç ekstra aparat kullanmam gerekiyor. Asıl ismi <a href="http://en.wikipedia.org/wiki/Bookmarklet">Bookmarklet</a> olan bu kavram için malesef güzel Türkçemizde doğru bir karşılık yok ya da ben bilmiyorum. Ben web aparatı ya da kısaca aparat demeyi tercih ediyorum.<br />
<span id="more-206"></span></p>
<p>Bu yazımda sizlerle hem bu geliştirme aparatları hem de webde kullandığım diğer bir kaç aparattan bahsedeceğim. Kullanmak istediğiniz aparatı sık kullanılanlara/yer imlerine ekleyerek ya da sürükle bırak yaparak adres çubuğunuza yerleştirerek kolayca kullanabilirsiniz.</p>
<p><strong>WTFramework</strong><br />
Bir web sitesinde, kullanılan JavaScript çatısı hakkında bilgi verir.</p>
<p><a href="http://blog.olicio.us/2008/11/08/wtframework-bookmarklet/">Aparatın web sitesi</a><br />
<a href="javascript:(function(){el=document.getElementById(">WTFramework</a></p>
<p><strong>Readability</strong><br />
Herhangi bir web sayfasında gezerken, aparatı kullandığınızda, sadece metne odaklanarak ve tercihlerinize göre sayfadaki metni daha okunabilir hale getiriyor. Aşağıdaki aparat benim tercihlerim olan, e-kitap, küçük karakter boyutu ve geniş metin alanı seçenekleriyle oluşturulmuştur. Web sitesinden siz de tercihlerinize göre aparatı ayarlayabilirsiniz.</p>
<p><a href="http://lab.arc90.com/experiments/readability/">Aparatın web sitesi</a><br />
<a href="javascript:(function(){readStyle='style-ebook';readSize='size-small';readMargin='margin-narrow';_readability_script=document.createElement('SCRIPT');_readability_script.type='text/javascript';_readability_script.src='http://lab.arc90.com/experiments/readability/js/readability.js?x='+(Math.random());document.getElementsByTagName('head')[0].appendChild(_readability_script);_readability_css=document.createElement('LINK');_readability_css.rel='stylesheet';_readability_css.href='http://lab.arc90.com/experiments/readability/css/readability.css';_readability_css.type='text/css';_readability_css.media='screen';document.getElementsByTagName('head')[0].appendChild(_readability_css);_readability_print_css=document.createElement('LINK');_readability_print_css.rel='stylesheet';_readability_print_css.href='http://lab.arc90.com/experiments/readability/css/readability-print.css';_readability_print_css.media='print';_readability_print_css.type='text/css';document.getElementsByTagName('head')[0].appendChild(_readability_print_css);})();">Readability</a></p>
<p><strong>jQuerify</strong><br />
jQuery kütüphanesi kullanılmamış bir web sayfasına istemci tarafından jQuery yükleyerek, Firebug vb eklentiler ile sayfada jQuery kodları çalıştırabilmenize olanak sağlar.</p>
<p><a href="http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet">Aparatın web sitesi</a><br />
<a href="javascript:(function(){var%20s=document.createElement('script'),el=document.createElement('div'),b=document.getElementsByTagName('body')[0];var%20otherlib=false,startCounter=tryCounter=10,delay=250,msg='';s.setAttribute('src','http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js');el.style.position='fixed';el.style.height='32px';el.style.width='220px';el.style.marginLeft='-110px';el.style.top='0';el.style.left='50%';el.style.padding='5px%2010px%205px%2010px';el.style.fontSize='12px';el.style.color='#222';el.style.backgroundColor='#f99';if(typeof%20jQuery!='undefined'){msg='This%20page%20already%20using%20jQuery%20v'+jQuery.fn.jquery;return%20showMsg();}else{if(typeof%20$=='function'){otherlib=true;}%20document.getElementsByTagName('head')[0].appendChild(s);}%20function%20showMsg(){el.innerHTML=msg;b.appendChild(el);window.setTimeout(function(){if(typeof%20jQuery=='undefined'){b.removeChild(el);}else{jQuery(el).fadeOut('slow',function(){jQuery(this).remove();});if(otherlib){$jq=jQuery.noConflict();}}},2500);}%20var%20tryjQuery=function(){setTimeout(function(){if(typeof%20jQuery=='undefined'){if(tryCounter){tryCounter--;tryjQuery();}else{msg='Sorry,%20but%20after%20'+startCounter+'%20attempts,%20jQuery%20hasn\'t%20loaded';showMsg();}}else{msg='This%20page%20is%20now%20jQuerified%20with%20v'+jQuery.fn.jquery;if(otherlib){msg+='%20and%20noConflict().%20Use%20$jq(),%20not%20$().';}%20showMsg();}},delay);};tryjQuery();})();">jQuerify</a></p>
<p><strong>Firebug Lite</strong><br />
Firebug eklentisi yüklü olmadığı ya da desteklenmediği durumlarda, sayfaya istemci tarafından Firebug Lite yüklenmesini sağlayarak, bir çok Firebug özelliğini kullanabilmenize olanak sağlar.</p>
<p><a href="http://getfirebug.com/lite.html">Aparatın web sitesi</a><br />
<a href="javascript:var%20firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug);">Firebug Lite</a></p>
<p><strong>XRAY</strong><br />
Adından da anlaşılabileceği gibi, sitenin röntgenini çekmenize olanak sağlar. XRAY&#8217;i aktif hale getirdikten sonra sayfa üzerindeki elemanlara tıklayarak, haklarında daha detaylı bilgi alabilmenize olanak sağlar.</p>
<p><a href="http://www.westciv.com/xray/">Aparatın web sitesi</a><br />
<a href="javascript:function%20loadScript(scriptURL)%20{%20var%20scriptElem%20=%20document.createElement('SCRIPT');%20scriptElem.setAttribute('language',%20'JavaScript');%20scriptElem.setAttribute('src',%20scriptURL);%20document.body.appendChild(scriptElem);}loadScript('http://westciv.com/xray/thexray.js');">XRAY</a></p>
<p><strong>W3C Markup Validation</strong><br />
Herhangi bir web sayfasında gezinirken, ilgili web sayfasının World Wide Web Consortium web standartları testinden girmesini sağlar.</p>
<p><a href="javascript:void(location='http://validator.w3.org/check?verbose=1&amp;uri='+escape(location));">W3C Markup Validation</a></p>
<p><strong>W3C CSS Validation</strong><br />
Herhangi bir web sayfasında gezinirken, ilgili web sayfasının World Wide Web Consortium CSS standartları testinden girmesini sağlar.</p>
<p><a href="javascript:void(location='http://jigsaw.w3.org/css-validator/validator?profile=css21&amp;warning=0&amp;uri='+escape(location))">W3C CSS Validation</a></p>
<p><strong>BuiltWith</strong><br />
Gezindiğiniz web sitesi ile ilgili bir çok bilgiye ulaşabilmenize olanak sağlar.</p>
<p><a href="http://builtwith.com/">Aparatın web sitesi</a><br />
<a href="javascript:void(location='http://builtwith.com/?'+escape(location))">BuiltWith</a></p>
<p><strong>TinyURL</strong><br />
TinyURL servisini kullanarak gezindiğiniz sayfanın adresini kısaltabilmenize olanak sağlar.</p>
<p><a href="http://tinyurl.com/">Aparatın web sitesi</a><br />
<a href="javascript:void(window.open('http://tinyurl.com/create.php?url='+document.location.href));">TinyURL 1</a></p>
<p>Bir diğer TinyURL aparatı</p>
<p><a href="http://justinhileman.info/articles/a-better-tinyurl-bookmarklet">Aparatın alternatif web sitesi</a><br />
<a href="javascript:var%20f=document.createElement(%27div%27);f.innerHTML=%22%3Cform%20action=%27http://tinyurl.com/create.php%27%20method=%27POST%27%3E%3Cinput%20type=%27text%27%20name=%27url%27%20value=%27%22+location.href+%22%27%3E%3Cinput%20type=%27text%27%20name=%27alias%27%20value=%27%22+encodeURIComponent(String(%27%27+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text)).replace(/[%5Ea-zA-Z0-9]+/g,%27-%27).toLowerCase())+%22%27%3E%3C/form%3E%22;document.body.appendChild(f).firstChild.submit();">TinyURL 2</a></p>
<p><strong>View cookies</strong><br />
İlgili web sayfası için tarayıcınızda saklanmış çerezleri gösterir.</p>
<p><a href="javascript:alert('Bu%20sunucu%20için%20saklanan%20çerezler:\n\n'%20+%20document.cookie.replace(/;%20/g,'\n'));">View cookies</a></p>
<p><strong>Acronym Lookup</strong><br />
Herhangi bir kısaltmanın açılımını sorgular.</p>
<p><a href="http://www.acronymfinder.com">Aparatın web sitesi</a><br />
<a href="javascript:Qr=document.getSelection();if(!Qr){void(Qr=prompt('Acronym%20please',''))};if(Qr)location.href='http://www.acronymfinder.com/af-query.asp?String=exact&amp;Acronym='+escape(Qr)+'&amp;Find=Find'">Acronym Lookup</a></p>
<p><strong>View Passwords</strong><br />
Gezindiğiniz web sayfasında yer alan parola alanlarına girilmiş parolaları göstermek için kullanılır.</p>
<p><a href="http://www.mydigitallife.info/2008/07/09/show-or-verify-asterisk-password-field-hidden-value-with-view-passwords-bookmarklet/">Aparatın web sitesi</a><br />
<a href="javascript:(function(){var%20s,F,j,f,i;%20s%20=%20'';%20F%20=%20document.forms;%20for(j=0;%20j&lt;F.length;%20++j)%20{%20f%20=%20F[j];%20for%20(i=0;%20i&lt;f.length;%20++i)%20{%20if%20(f[i].type.toLowerCase()%20==%20'password')%20s%20+=%20f[i].value%20+%20'\n';%20}%20}%20if%20(s)%20alert('Passwords%20in%20forms%20on%20this%20page:\n\n'%20+%20s);%20else%20alert('There%20are%20no%20passwords%20in%20forms%20on%20this%20page.');})();">View Passwords 1</a><br />
<a href="javascript:void((function(){var%20a,b;b='&lt;'+'html&gt;%5Cn&lt;body&gt;Passwords%20in%20this%20page: &lt;p&gt;%5Cn';(function(c){var%20d,e,f,g,h;for(d=0;d&lt;c.length;d++){try{arguments.callee(c.frames[d]);}catch(i){}}e=c.document.forms;for(f=0;f&lt;e.length;f++){g=e[f];for(h=0;h&lt;g.length;h++){if(g[h].type.toLowerCase()=='password')b+=g[h].value+'&lt;br&gt;%5Cn';}}})(top);b+='&lt;/body&gt;%5Cn&lt;/html&gt;%5Cn';a=window.open('','','width=200,height=300').document;a.open();a.write(b);a.close();})())">View Passwords 2</a></p>
<p><strong>Wave &#8211; Web Accesibilty</strong><br />
Gezindiğiniz web sayfasının Wave adı verilen web erişilebilirliği aracı ile test edilmesini sağlar.</p>
<p><a href="http://wave.webaim.org">Aparatın web sitesi</a><br />
<a href="javascript:void(window.open('http://wave.webaim.org/report?url='+escape(window.location)))">Wave &#8211; Web Accesibilty</a></p>
<p><strong>Accessify</strong><br />
Bir başka erişilebilirlik aparatı</p>
<p><a href="http://www.accessify.com/tools-and-wizards/accessibility-tools/favelets/quick-page-test/">Aparatın web sitesi</a><br />
<a href="javascript:function%20loadScript(scriptURL){var%20scriptElem=document.createElement('SCRIPT');scriptElem.setAttribute('src',scriptURL);scriptElem.setAttribute('type','text/javascript');document.body.appendChild(scriptElem);}loadScript('http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js');loadScript('http://accessify.com/_scripts/favelets/accessify-page-test.js');">Accessify</a></p>
<p><strong>Go to Top of Domain</strong><br />
Bir web sayfasında gezinirken kolay yoldan ilgili web sitesinin kök adresine gitmenize olanak sağlar.</p>
<p><a href="javascript:location.pathname%20=%20%22%22;%20void%200">Go to Top of Domain</a></p>
<p><strong>Wikipedia Lookup</strong><br />
Seçili metni Wikipedia&#8217;da arar.</p>
<p><a href="javascript:(function(){q=document.getSelection();%20if(!q){void(q=prompt('Wikipedia%20keywords:',''))};%20if(q)location.href='http://tr.wikipedia.org/w/wiki.phtml?search='+escape(q)})()">Wikipedia Lookup</a></p>
<p><strong>Spry Medias Design Bookmarklet</strong><br />
Gezindiğiniz web sayfası için, bir çok özelliğe sahip, Design isimli aracı yükleyerek aktif hale getirir.</p>
<p><a href="http://www.sprymedia.co.uk/article/Design">Aparatın web sitesi</a><br />
<a href="javascript:function%20fnStartDesign(sUrl)%20{var%20nScript%20=%20document.createElement('script');nScript.setAttribute('language','JavaScript');nScript.setAttribute('src',sUrl);document.body.appendChild(nScript);}fnStartDesign('http://www.sprymedia.co.uk/design/design/media/js/design-loader.js');">Spry Medias Design Bookmarklet</a></p>
<p><strong>Slayer Office Favelet Suite</strong><br />
DOM inceleme, değiştirme, vb bir çok araca sahip bir paket uygulamayı yükleyerek, kullanıma hazır hale getirir.</p>
<p><a href="http://slayeroffice.com/?c=/content/tools/suite.html">Aparatın web sitesi</a><br />
<a href="javascript:s=document.body.appendChild(document.createElement('script'));s.id='fs';s.language='javascript';void(s.src='http://slayeroffice.com/tools/suite/suite.js');">Slayer Office Favelet Suite</a></p>
<p><strong>Anti No Right Click</strong><br />
Sağ tuş engellemesi olan sayfalarda, bu sinir bozucu engeli ortadan kaldırır.</p>
<p><a href="http://www.codehouse.com/javascript/favelets/anti_no_right_click/">Aparatın web sitesi</a><br />
<a href="javascript:/*Anti%20No%20Right%20Click.%20Copyright%20(C)%20CodeHouse.com,%202004*/function%20kill(doc){doc.onmousedown=doc.onmouseup=doc.oncontextmenu=doc.onselectstart=doc.ondragstart=function(){return%20true};if(window.releaseEvents){releaseEvents(Event.MOUSEDOWN|Event.MOUSEUP);}}onerror=function(){return%20true};kill(document);if(frames.length){for(i=0;i&lt;frames.length;++i){kill(frames[i].document);}}else{kill(document);}">Anti No Right Click</a></p>
<p><strong>View Dom Source</strong><br />
Gezindiğiniz web sayfasının DOM kaynağını ekrana getirir.</p>
<p><a href="javascript:(function(){%20function%20htmlEscape(s){s=s.replace(/&amp;/g,'&amp;');s=s.replace(&gt;&lt;/a&gt;/g,'&gt;');s=s.replace(/&lt;/g,'&lt;');return%20s;}%20x=window.open();%20x.document.write(' &lt;pre&gt;'%20+%20htmlEscape('&lt;html&gt;\n'%20+%20document.documentElement.innerHTML%20+%20'\n&lt;/html&gt;'));%20x.document.close();%20})();">View Dom Source</a></p>
<div class="shr-publisher-206"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fweb-gelistiricilerinin-isine-yarayacak-20-bookmarklet-web-aparati%2F' data-shr_title='Web+geli%C5%9Ftiricilerinin+i%C5%9Fine+yarayacak+20+bookmarklet+%28web+aparat%C4%B1%29'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fweb-gelistiricilerinin-isine-yarayacak-20-bookmarklet-web-aparati%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fweb-gelistiricilerinin-isine-yarayacak-20-bookmarklet-web-aparati%2F' data-shr_title='Web+geli%C5%9Ftiricilerinin+i%C5%9Fine+yarayacak+20+bookmarklet+%28web+aparat%C4%B1%29'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fweb-gelistiricilerinin-isine-yarayacak-20-bookmarklet-web-aparati%2F' data-shr_title='Web+geli%C5%9Ftiricilerinin+i%C5%9Fine+yarayacak+20+bookmarklet+%28web+aparat%C4%B1%29'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/web-gelistiricilerinin-isine-yarayacak-20-bookmarklet-web-aparati/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parça Tanımlayıcılar ile Cross Domain Frame İletişimi</title>
		<link>http://www.karalamalar.net/parca-tanimlayicilar-ile-cross-domain-frame-iletisimi/</link>
		<comments>http://www.karalamalar.net/parca-tanimlayicilar-ile-cross-domain-frame-iletisimi/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 17:35:19 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[çapraz]]></category>
		<category><![CDATA[çerçeve]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[cross]]></category>
		<category><![CDATA[fragment identifier]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[iletişim]]></category>
		<category><![CDATA[parça tanımlayıcı]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=197</guid>
		<description><![CDATA[Yazılarımı yazarken genelde ingilizce terimlerin varsa]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Yazılarımı yazarken genelde ingilizce terimlerin varsa <a href=http://www.karalamalar.net/etiket/turkce/">Türkçe</a> karşılıklarını yoksa en yakın anlamlarını kullanmaya çalışıyorum. Ne var ki Türkçe yeterli kaynak olmadığından ve ingilizce kaynaklar çok fazla olduğundan çoğu zaman bir konu ile ilgili arama yaparken ingilizce anahtar kelimeler kullanıyorum. Bu makalenin başlığını da <strong>Parça tanımlayıcılar ile çapraz alan adı çerçeve iletişimi</strong> olarak yazmak isterdim fakat arandığında bulunabilsin diye mecburen bu şekilde yazmak durumunda kaldım.<br />
<span id="more-197"></span></p>
<p>Güvenlik gereği tarayıcılar, bir alan adı üzerinde çalışan bir betiğin başka bir alan adı üzerinde çalışan başka bir betik ile haberleşmesine ve/veya ilgili dokümanın özelliklerine erişebilmesine izin vermezler. Pratikte çok işe yarayan bu güvenlik önlemi, her iki alan adına sahipseniz ve bu iki alan adında çalışan uygulamaların iletişim kurmaları gerekliliği söz konusuysa, durum çok can sıkıcı bir hal alabiliyor.</p>
<p>Flash tabanlı uygulamalarda sunucuların kök klasöründe düzgün bir şekilde yapılandırılmış <strong>crossdomain.xml</strong> dosyası yardımı ile bu sorunun üstesinden gelebiliyorsunuz. (crossdomain.xml ile ilgili daha detaylı bilgiyi <a href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&#038;file=00001621.html">adobe sitesinden</a> edinebilirsiniz.) Peki javascript ile çalışırken ne yapılabilir? Bu makalede bu soruya cevap olabilecek bir yöntemden bahsedeceğim.</p>
<p>İşyerinde bir projede karşıma çıkan benzer bir problem için çözüm ararken, delicious üyeliklerim arasında tam da aradığım konuyla ilgili bir <a href="http://tagneto.blogspot.com/2006/06/cross-domain-frame-communication-with.html">yazı</a> buldum. Yazının ana fikri, değiştiğinde sayfanın yenilenmesini gerektirmeyen parça tanımlayıcı (<a href="http://en.wikipedia.org/wiki/Fragment_identifier">Fragment Identifier</a>) adı verilen url bölümünü kullanarak çerçeveleri konuşturmak.</p>
<p>Parça tanımlayıcılar, bir web sayfası içinde, sayfayı yenilemeden sayfanın içerisinde bağlantılar yardımıyla gezinti yapılabilmesine olanak sağlarlar. <strong>http://www.test.com/urunler.html#A-Urunu</strong> şeklinde bir bağlantı, sayfa yüklendikten sonra sayfanın <strong>A-Urunu</strong> olarak işaretlenmiş bölümüne odaklanmasını sağlar. <strong>A-Urunu</strong> olarak işaretlenmiş bir bölüm yoksa, bu durumda sayfa herhangi bir hata vermez ve özel bir konuma odaklanmaz.</p>
<p>Çerçeveleri konuşturmak için bizim de ihtiyacımız olan tam böyle bir şey. Tek yapmamız gereken <strong>A</strong> sayfasından, yine  <strong>A</strong> sayfasında yer alan sayfa içi çerçeve (iframe) içinde yer alan <strong>B</strong> sayfasına veri göndermek için, göndereceğimiz veriyi <strong>B</strong> sayfasının adres bölümüne parça tanımlayıcı olarak göndermek. <strong>B</strong> sayfasını da sürekli olarak parça tanımlayıcı kısmı dinleyecek ve yorumlayacak şekilde yapılandırmak. Tam ters mantıkla, <strong>A</strong> sayfasını dinleyici, <strong>B</strong> sayfasını veri gönderici şekilde yapılandırarak her iki çerçevenin birbirleriyle iletişim kurmasını sağlayabilirsiniz.</p>
<p>İletişimin boyutu, parça tanımlayıcıların ve dolayısıyla url bölümüne yazılabilecek en yüksek veri miktarı ile sınırlı. Ayrıca sayfa içi çerçeve kullanmak, tarayıcının geri tuşununu da doğru çalışmamasına yol açabilir. Bu iki konu da yöntemin dezavantajları arasında sayılabilir.</p>
<p><a href="http://www.karalamalar.net/ornekler/CrossComm.html">Örnek sayfaları</a>nın kodlarını inceleyerek anlatmak istediğimi çok daha rahat anlayabilirsiniz.</p>
<div class="shr-publisher-197"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fparca-tanimlayicilar-ile-cross-domain-frame-iletisimi%2F' data-shr_title='Par%C3%A7a+Tan%C4%B1mlay%C4%B1c%C4%B1lar+ile+Cross+Domain+Frame+%C4%B0leti%C5%9Fimi'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fparca-tanimlayicilar-ile-cross-domain-frame-iletisimi%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fparca-tanimlayicilar-ile-cross-domain-frame-iletisimi%2F' data-shr_title='Par%C3%A7a+Tan%C4%B1mlay%C4%B1c%C4%B1lar+ile+Cross+Domain+Frame+%C4%B0leti%C5%9Fimi'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fparca-tanimlayicilar-ile-cross-domain-frame-iletisimi%2F' data-shr_title='Par%C3%A7a+Tan%C4%B1mlay%C4%B1c%C4%B1lar+ile+Cross+Domain+Frame+%C4%B0leti%C5%9Fimi'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/parca-tanimlayicilar-ile-cross-domain-frame-iletisimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>valiDate &#8211; JavaScript ile Tarih Doğrulama</title>
		<link>http://www.karalamalar.net/validate-javascript-ile-tarih-dogrulama/</link>
		<comments>http://www.karalamalar.net/validate-javascript-ile-tarih-dogrulama/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 12:24:55 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[betik]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[doğrulama]]></category>
		<category><![CDATA[fonksiyon]]></category>
		<category><![CDATA[geçerlilik]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[tarih]]></category>
		<category><![CDATA[valiDate]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=144</guid>
		<description><![CDATA[Uzun bir aradan sonra tekrar merhaba. Yılbaşında bahsettiğim sürpriz yazar henüz ortalarda yok. Aldığım duyumlara göre ilk yazısı hazırmış, umarım yakında burada görürüz. Ben şimdi size valiDate&#8217;den bahsedeyim. Çalışırken javascript ile tarih doğrulaması yapma ihtiyacı doğdu. Kullanıcının gün, ay ve yıl kutularından seçtiği değerler geçerli bir tarih oluşturuyor mu test etmem gerekiyordu. Önce biraz internette [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Uzun bir aradan sonra tekrar merhaba. Yılbaşında bahsettiğim sürpriz yazar henüz ortalarda yok. Aldığım duyumlara göre ilk yazısı hazırmış, umarım yakında burada görürüz.</p>
<p>Ben şimdi size valiDate&#8217;den bahsedeyim. Çalışırken javascript ile tarih doğrulaması yapma ihtiyacı doğdu. Kullanıcının gün, ay ve yıl kutularından seçtiği değerler geçerli bir tarih oluşturuyor mu test etmem gerekiyordu. Önce biraz internette araştırdım ve <a href="http://www.javascriptkit.com/script/script2/validatedate.shtml">şurada</a> ihtiyacımı az çok karşılayacak ufak bir betik buldum. Biraz sadeleştirme ve biraz özelleştirme ile projemde (ve gelecekte) kullanmak üzere aşağıdaki ufak fonksiyonu yazdım. Gelecekteki çalışmalarıma referans olması ve ihtiyacı olanların kullanması için buraya da ekliyorum.</p>
<pre class="brush:javascript">function valiDate(d, m, y) {
var o = new Date(y, m - 1, d);
return o.getDate() == d &#038;&#038; o.getMonth() + 1 == m &#038;&#038; o.getFullYear() == y;
}</pre>
<div class="shr-publisher-144"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-javascript-ile-tarih-dogrulama%2F' data-shr_title='valiDate+-+JavaScript+ile+Tarih+Do%C4%9Frulama'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-javascript-ile-tarih-dogrulama%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-javascript-ile-tarih-dogrulama%2F' data-shr_title='valiDate+-+JavaScript+ile+Tarih+Do%C4%9Frulama'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvalidate-javascript-ile-tarih-dogrulama%2F' data-shr_title='valiDate+-+JavaScript+ile+Tarih+Do%C4%9Frulama'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/validate-javascript-ile-tarih-dogrulama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

