"tamam da" sorduğun soruyla alakası var mı şuan da ki hatanın? tabi ki yok. yani benim yaptığım "olmuyor" değil. şuan istediğin şekilde çalışıyor. hata var mı, evet kontrol ettim hata var. bu da şundan kaynaklanıyor, window.scrollTo(0, document.body.scrollHeight);
konuda bahsettiğin hataya odaklandığım için, bu kısma dikkat etmemişim. sen scrolun yukarı gitmesine baştan beri izin vermemişsin ki. sonra olmuyor. bal gibide oluyor, lütfen pasif agresif tavırla hesap sormak yerine, kodun ne yaptığından çok nasıl çalıştığını anlamaya çalışınız. al, kopyala yapıştır, işini gör. böyle olmamalı bence.
document.addEventListener('scroll', () => {
if((window.innerHeight + window.scrollY) >= document.body.scrollHeight)
fetch("https://localhost/data.txt").then(async response => {
document.querySelector('#mesajlar').innerHTML = await response.text();
});
});
buyrun sıfırdan yazdım. amac neydi; scrollbar'ın mevcut pozisyonu ekranın mevcut yüksekliğine eşit veya üzerinde ise, içeriği yükle. süre tanımlayıp, daha sonra bunu kaldırmaya bile gerek yoktu aslında. burada bak, ekstra kod dahi yok, üstüne kodları çıkarttık hatta. kendi ayağına sıkmak istiyorsan bu şekilde devam et, ama gelişim için biraz gayret arkadaşım ya. ben biraz kolay alınıyorum, "tamam da" diye yazınca siz biraz sinirlendim kusra bakmayın.
not: azami yükseklik, javascript'in verdiği yükseklikten +15 piksel fazla çıkıyor bende, bu da geriye dönüşteki o 15 piksellik fark'dan dolayı, tekrar sorguya alabiliyor. sizde de öyleyeyse buna göre -15 düşürün. console.log((window.innerHeight + window.scrollY), document.body.scrollHeight)
bununla kontrol edebilirsin.
soruyu anladığım kadarıyla, kodları bulmaya çalıştım. bazı değişkenlerde eksik vardı, test ederek kendim tamamladım. en temel sorun. scrolun insmesini sağlayan anonim fonksiyonun koşul içersine yazılmasından kaynaklanıyor, dolayısıyla else durumda tanımsız göründüğünden çalışmıyor. çalışan yöntemi daha kısa olarak düzenleyip yazdım.
benim kodum
window.onscroll = function(ev) {
var silinterval = setInterval(() => {
fetch("https://localhost/data.txt").then(async response => {
var data = await response.text();
document.querySelector('#mesajlar').innerHTML = data;
window.scrollTo(0, document.body.scrollHeight);
});
}, 2000);
(window.innerHeight + window.scrollY) >= document.body.scrollHeight ?
silinterval : clearInterval(silinterval);
};
senin kodun ve hatanın sebep olduğu nokta yorum satırı olarak işaretli;
window.onscroll = function(ev) {
if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) {
/*
silinterval = setInterval(() => {
fetch("sikayet.txt").then(function(response) {
return response.text();
}).then(function(data) {
mesajlar.innerHTML = data
window.scrollTo(0, document.body.scrollHeight);
})
}, 2000);
*/
} else {
clearInterval(silinterval);
}
};
kendi kodundan devam etmek istersen düzenlemen gereken, tanımlamayı koşuldan önce yazmak;
window.onscroll = function(ev) {
var silinterval = setInterval(() => {
fetch("sikayet.txt").then(function(response) {
return response.text();
}).then(function(data) {
mesajlar.innerHTML = data
window.scrollTo(0, document.body.scrollHeight);
})
}, 2000);
if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) {
silinterval;
} else {
clearInterval(silinterval);
}
};
o zaman ek olarak sertifikanın doğrulanmasını iptal etmek için şunu CURLOPT_SSL_VERIFYPEER
false ayarda kullanmayı dene. tam emin olmamak ile şunu da sıfır ayarında deneyebilirsin;
CURLOPT_SSL_VERIFYHOST
Common Name veya Subject Alternate Name alanının varlığının yanında
sağlanan konak ismi ile eşleşmenin de aranması için 2, isimlere bakmak
için 0 olmalıdır. 1 kullanılmamalıdır. Üretim ortamlarında bu seçeneğin
değeri 2 (öntanımlıdır) olarak tutulmalıdır.
edit;
ben sorunsuz bağlandım, eğer bağlanmak istediğiniz site şuysa, https://earsivportal.efatura.gov.tr/
HTTP/1.1 405 Method Not Allowed
Server: nginx/1.19.0
Date: Sat, 09 Jul 2022 21:09:00 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 104
Connection: keep-alive
X-Powered-By: Undertow/1
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
CIP:
ama güvenlik önlemleri nedeniyle, 200 değil 405 yanıtı veriyor. post methodunu desteklemiyor.
çalışan basit bir örnek ile bağlanabilirsin;
$url = "https://earsivportal.efatura.gov.tr/";
$curl = curl_init($url);
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false
));
$response = curl_exec($curl);
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$error = curl_errno($curl) . ': ' . curl_error($curl);
curl_close($curl);
echo $response;
CURLOPT_SSLVERSION
kullanarak ssl versiyonunu değiştirmeyi deneyin, varsayılan sıfırdır. daha detaylı hata dönmesi içinde CURLOPT_VERBOSE
kullanabilirsiniz.
CURL_SSLVERSION_DEFAULT (0),
CURL_SSLVERSION_TLSv1 (1),
CURL_SSLVERSION_SSLv2 (2),
CURL_SSLVERSION_SSLv3 (3),
CURL_SSLVERSION_TLSv1_0 (4),
CURL_SSLVERSION_TLSv1_1 (5) veya CURL_SSLVERSION_TLSv1_2 (6) sabitlerinden biri. Azami TLS sürümü CURL_SSLVERSION_MAX_* sabitlerinden biri kullanarak atanabilir. CURL_SSLVERSION_* sabitlerinden biri ile CURL_SSLVERSION_MAX_* sabitlerinden birini VEYAlamak da mümkündür. CURL_SSLVERSION_MAX_DEFAULT (kütüphane tarafından desteklenen en büyük sürüm), CURL_SSLVERSION_MAX_TLSv1_0, CURL_SSLVERSION_MAX_TLSv1_1, CURL_SSLVERSION_MAX_TLSv1_2 veya CURL_SSLVERSION_MAX_TLSv1_3.
En iyi seçiminiz, bunu ayarlamamak ve öntanımlıyı kullanmasına izin vermektir. Bunu 2 veya 3 olarak ayarlamak, SSLv2 ve SSLv3'teki bilinen güvenlik açıkları göz önüne alındığında çok tehlikelidir.
dosya okumak için olası iki seçenek var file_get_contents
ile readfile
file_get_contents
için
$dosyaIcerigi = file_get_contents($dosya) //url veya dosya yolu ikisi de çalışır
echo $dosyaIcerigi;
readfile
biraz daha farklı, dökümanı tüm ekrana yazdırır ve header
da content-type
bildirilmez ise, salt formatta gösterilir
header('Content-type: application/xml');
readfile($dosya); // sadece yol, url desteklemez
bazen sana şaşırıyorum, herkese çok detaylı uzun ve teknik cevaplar veriyorsun. iki mesajı da okudum, bahsettiğin örneği de uyguladım, yeni aynı sonucu aldım, aslında 3. mesajımda yer alan callback'den bir farkı yok, sadece ben daha kısa yazmışım. birde siz, now anahtarını da bu callback'a almışsınız. çok fazla şey denedim aslında, dediğiniz gibi işlem bitmeden değerleri okumaya çalıştığımı fark etmemin üzerindne çok geçti. ama ne yaparsam yapayım, asekron döngü yazıp değerin dönmesini bekletsem bile değer alamıyorum. sizin verdiğiniz örnekte başarısızlıkla sonuçlandı. başta şöyle düşündüm, kurucu içerisinde tek özelliğe tüm ayarları aktarırsam, diğer yöntemler içerisinde ekstra kod yazmadan işimi görürüm. bu yüzden bu kadar zorladım, aman bu da böyle olsun demedim. nitekim olmadı : )
kendi kodunuzu test etmek istersenizde
//manifest.json
{
"name": "Olymp Trade Transactions",
"description": "For technical support, you can always contact me on fiver. https://www.fiverr.com/****",
"version": "1.0",
"manifest_version": 3,
"action": {
"default_popup": "index.html",
"default_icon": "logo.png"
},
"permissions": [
"storage",
"unlimitedStorage",
"notifications",
"contextMenus"
]
}
sıradan bir klasöre bunu ve index.html olarak kodunuzu ekleyebilirsiniz.
pes ettim. az kod çok iş mantığıyla kod yazmak istemiştim olmadı, ilk çözüme geri dönüyorum. her yöntem için async sarmalayıcı yazıp beklettikten sonra, yazıyorum ne yazcaksam.
Promise.all([this.getData()]).then(obj => {});
o kadar kod ekledikten sonra, şunu eklememek için çektiğim ızdraba rağmen, ekliyorum. konuya kimsenin fikir belirtmemesi de ayrı ayıp oldu.
iki adet örnek bırakıyorum konuyu aydınlatabilecek bir bilgiye ciddi anlamda ihtiyacım var. sorun ise, tanımlı nesnelerin anahtar belirtildiğinde tanımsız dönmesi.
bu callback kullandığım örneğim;
class Conf {
constructor() {
this.conf = {};
Object.entries(this.storageData().data).forEach(([key, val]) => {
chrome.storage.local.get(key, obj => {
!obj[key] ?
chrome.storage.local.set(
{[key]:val}, this.getData2({[key]:val})) :
this.getData2(obj);
});
});
this.conf.now = new Intl
.DateTimeFormat(this.conf.lang, {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
timeZoneName: 'longGeneric',
timeZone: this.conf.timeZone
}).format(new Date(Date.now()));
console.log(this.conf, this.conf.lang) //output parameters 1: succes, parameter: 2 failed
}
getData2(data){
Object.assign(this.conf, data)
console.log(this.conf.lang) // output: succes
}
storageData(){
this.data = {
lang : 'en',
testData1: 1,
testdata2: 2,
}
return this;
}
}
(function(){ new Conf; })();
bu da promise kullandığım örneğim;
class Conf {
getData2(data){
Object.assign(this.conf, data)
}
async getData(){
const obj = new Promise(resolve =>{
resolve(this.storageLocal());
}).then(obj => { return obj });
this.conf = await obj;
console.log(this.conf, this.conf.lang);
}
storageLocal(){
this.conf = {};
/*
checks the specified cookie, if there is no cookie it automatically creates the specified cookie
&&
selects the created cookie as object and returns value
@String key => key value of the object contained in the cookie
@Object val => configuration object contained in the cookie
*/
Object.entries(this.storageData().data).forEach(([key, val]) => {
chrome.storage.local.get(key, obj => {
!obj[key] ?
chrome.storage.local.set(
{[key]:val}, this.getData2({[key]:val})) :
this.getData2(obj);
});
});
this.conf.now = new Intl
.DateTimeFormat(this.conf.lang, {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
timeZoneName: 'longGeneric',
timeZone: this.conf.timeZone
}).format(new Date(Date.now()));
return this.conf;
}
storageData(){
this.data = {
lang : 'en',
testData1: 1,
testdata2: 2,
}
return this;
}
}
(function(){
var Settings = new Conf;
Settings.getData();
})();
name server değişikliği yapman gerekiyor bunun için.
- ilk adım domain aldığın sağlayıcıyıda, domain ile ilgili ayarlar sayfasından domainini seç ve NS ibaresini ara.
- ikinci adım hosting servis sağlayıcın açıksa, domain ekle de. varsayılanda zaten kendi ns'sinini gösterir. kendi ns adresini eklemez veya gözükürde yoksa soruver.
- üçüncü adım, ilk adımdaki domain ns ayar kısmına ikinci adımda elde ettiğin ns adresini yaz.
- dördündü adım, ns eklendiğinde ikinci adımdaki domain ekleme adımını tamamla.
- son adım (opsiyonel) bazen ns değişikliklerinin oturması zaman alıyor, ticket atarsan 48 saat derler. hiç 48 saat sürdüğünü görmedim ama. tarayıcı önbelliğini temizle. ardından consolu veya terminali aç
ipconfig /flushdns
yazıp sonuc tamamlanınca bilgisayarı yeniden başlat.