Kısa süre önce Chrome'un artık kurumsal sistemimiz bu yöntemi kullandığı için sorunlu olan window.showModalDialog'u desteklemediğini keşfettik. Görünüşe göre, showModalDialog'u geri yüklemenizi sağlayan kısa vadeli bir geçici çözüm var, ancak ortalama kullanıcı sayımızın çok karmaşık (ve riskli) kayıt defterini değiştirmeyi içeriyor. Bu yüzden bu geçici çözümün büyük bir hayranı değilim.window.open'den bir değer döndürme
Uzun süreli çözüm, bu eski yönteme yapılan tüm çağrıları kaldırmak ve uygun bir jQuery eklentisi ile değiştirmek (örneğin, VistaPrint'in Skinny Modal Dialog plugin gibi.). Diğer önerileri bu arada bekliyoruz.
Kalıcı iletişim kutusunu kullandığımız tipik senaryo, geri alınamayan bir eylemi gerçekleştirmeden önce kullanıcının Evet/Hayır onayını istemesini istemektir, kullanıcının devam etmeden önce şartlar ve koşulları kabul etmesini istemek, vb. Genellikle onclick olayı kalıcı bir iletişim kutusunda "Evet" veya "Tamam" düğmesine şuna benzer:
window.returnValue = true;
window.close();
benzer şekilde, "Hayır" butonuna şuna benzer "İptal" veya:
window.returnValue = false;
window.close();
gerçek şu ki biz iletişim kutusundan bir değer döndürebilir, çünkü "Üst" pencerede kullanıcı "Tamam" ya da düğme şöyle "İptal" tıklamadığını haberdar olmak için:
var options = "center:1;status:1;menubar:0;toolbar:0;dialogWidth:875px;dialogHeight:650px";
var termsOfServiceAccepted = window.showModalDialog(myUrl, null, options);
if (termsOfServiceAccepted) {
... proceed ...
}
Ben ShowModalDialog hakkında söz edeceğim son şey büyük bile çalışır olmasıdır iletişim kutusunda görüntülenen belge farklı bir etki alanından olduğunda. Bizim javascript bizim http://the-client.com çalışıyor ama bizim "Hizmet Şartları" web sayfası http://the-enterprise-vendor.com
için çok yaygındır Biz uzun vadeli çözüm üzerinde çalışırken ASAP dağıtabileceğim geçici bir çözüme ihtiyacım var. pop-up pencere "ebeveyn" bir değer döndürmek gerekir varolan JavaScript
- asgari kod değişikliği: İşte benim kriterdir. Genellikle bu değer bir Boole ama herhangi basit tür olabilir: içeriğin URL farklı bir etki İşte
den ise
1) benim JavaScript aşağıdaki yöntemi ekleyin:
function OpenDialog(url, width, height, callback)
{
var win = window.open(url, "MyDialog", width, height, "menubar=0,toolbar=0");
var timer = setInterval(function()
{
if (win.closed)
{
clearInterval(timer);
var returnValue = win.returnValue;
callback(returnValue);
}
}, 500);
}
Bu yöntemle görebileceğiniz gibi, pop up penceresi gizleyerek mümkün olduğunca iletişim kutusuna benzer görünmesi için deneyin menü ve araç çubuğu, her zaman bir zaman ayarlıyorum Pencerenin kullanıcı tarafından kapatılıp kapatılmadığını kontrol etmek için 500 milisaniyedir ve eğer öyleyse, 'returnValue' değerini alın ve bir geri çağırma çağırın.
2) yerine aşağıdaki tüm ile ShowModalDialog çağrıları:
OpenDialog(myUrl, 875, 650, function (termsOfServiceAccepted)
{
if (termsOfServiceAccepted)
{
... proceed ....
}
});
yönteme dördüncü parametre kullanıcı onu durdurdu, önce "Tamam" düğmesine tıklandığında olmadığını kontrol geri arama olduğunu.Eğer ben teklif çözümün ne düşünüyorsunuz
- :
Uzun bir soru olduğunu biliyorum ama temelde aşağı kaynar?
- Özellikle, window.open ile açılan bir pencereden bir returnValue alabileceğimi düşünüyor musunuz?
- Önerebileceğiniz başka bir alternatif var mı?
bağlı olmadığını fark olduğunu yazdı var
DÜZENLEME: http://stackoverflow.com/a/9276310/1086511 – Rodrigo
yalnızca krom kullanmaya devam ederseniz, "showModal" ve "