Thursday, May 22, 2008

Permission denied to call method XMLHttpRequest.open

Problem: XMLHttpRequest ile herhangi bir domain üzerinden ya da local çalışırken başka bir alan adına sahip bir makineden veri çekmeye kakıştığımda şu hatayı aldım:


Error: uncaught exception:
Permission denied to call method XMLHttpRequest.open

Türkçesi:
XMLHttpRequest.open methodunun çağrılması için gerekli izniniz yok


Çözüm:

önbilgi: bu işlemin adı cross scripting. Ararsanız bir çok kaynak bulacaksınız.

Öğrendim ki bu bir sistem hatası değil (olamaz da zaten). bu kullandığım tarayıcının bir uyarısı ve önlemi. firefox 3.0 kullanmaktaydım. i.e. 6 denemek istedim (yani en güvensiz olanı). çözüm olarak güvensiz bir tarayıcı kullanın.

kullandığım javascript

function post_eyle()
{
xmlHttp=ajax();
if (xmlHttp==null)
{
alert ('Tarayıcınız Ajax Desteklemiyor!');
return;
}

var url='https://......com/index.php';
var sc ='test=test';
xmlHttp.open('POST', url, true);
xmlHttp.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');
xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xmlHttp.setRequestHeader('Content-length', sc.length);
xmlHttp.setRequestHeader('Connection', 'close');
xmlHttp.onreadystatechange=SonucGetir;
xmlHttp.send(sc);
}
function SonucGetir()
{
if (xmlHttp.readyState==4 && xmlHttp.status == 200)
{
document.getElementById('sonuc').innerHTML=xmlHttp.responseText;
//alert(xmlHttp.responseText);
}
}
function ajax()/* Bu fonksiyonu c/p ile alın ve olduğu gibi kullanın bir zarar yaratmaz.. */
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject('Msxml2.XMLHTTP');
}
catch (e)
{
xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');
}
}
return xmlHttp;
}

No comments: