Я создаю страницу, которая принимает данные постов с любого количества страниц, которые я не могу изменить, получить к ним доступ или каким-либо образом контролировать.
Мне нужно, так или иначе, получить часовой поясПользователь.Я знаю, что в идеале страница публикации могла бы сделать это, но я не могу получить доступ к этим страницам.
Я прочитал другие ответы на этом сайте и нашел почти два, но не совсем там решения.
Во-первых, есть JavaScript.Я могу заставить функцию javascript возвращать (или изменять метку) правильное значение, но проблема в том, что мне нужна эта информация перед обратной передачей.Я пытался написать название часового пояса на другой странице и прочитать эту страницу, но я понятия не имею, как начать это делать?Любой другой обходной путь для использования javascript приветствуется, или любой способ принудительно вызвать его перед вызовом Page_Load?
function getTimeZone()
{
var d = new Date()
var gmtHours = -d.getTimezoneOffset()/60;
var label = document.getElementById("<%=TZ.ClientID%>");
label.textContent = "GMT " + gmtHours;
}
Второе решение - прочитать его с другой страницы, и я использую это:
http://ipinfodb.com/ip_query.php?ip=192.36.167.120&timezone=true
(Между прочим, совершенно случайный ip, кстати)
Итак, вот моя функция, чтобы получить информацию с этого сайта:
public string GetTimezone(string ip)
{
string address = string.Format("http://ipinfodb.com/ip_query.php?ip={0}&timezone=true", ip);
string timezone = "";
try
{
XmlTextReader reader = new XmlTextReader(address);
HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create(address);
wrq.Proxy.Credentials = CredentialCache.DefaultCredentials;
reader = new XmlTextReader(wrq.GetResponse().GetResponseStream());
string lastRead = "";
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
lastRead = reader.Name;
}
if (reader.NodeType == XmlNodeType.Text)
{
if (string.Compare(lastRead, "TimezoneName", true) == 0)
{
timezone = reader.Value;
break;
}
}
}
}
catch
{
timezone = "";
}
return timezone;
}
В принципе, это работает в отладкережим, но когда он живой, возвращается только пустая строка.Я сбит с толку?Есть ли лучший способ прочитать данные со страницы?Я использую Request.ServerVariables ["REMOTE_ADDR"], чтобы получить ip, и это кажется правильным, поскольку он вставляет правильный ip в базу данных, которую я использую.
Вот вызов:
GetTimezone(Request.ServerVariables["REMOTE_ADDR"]);