Браузер силы для использования нового CSS

У меня возникла аналогичная проблема. Чтобы решить эту проблему, выполните простую работу:

В вашем onCreateView вам придется подождать до создания представления. Поэтому измените свои строки следующим образом:

mList = (ListView)v.findViewById(R.id.list);
mList.setAdapter(adapter);

ИЗМЕНИТЬ ВЫШЕ ДВУХ ЛИНИЙ В:

mList = (ListView)v.findViewById(R.id.list);
mList.post(new Runnable() {
    public void run() {
        mList.setAdapter(adapter);
    }
});

Надеюсь, это поможет другим, столкнувшимся с подобной проблемой

8
задан 15 revsnobody 22 October 2009 в 19:32
поделиться

7 ответов

Я не знаю, является ли это корректное использование, но я думаю, что можно вызвать перезагрузку файла CSS с помощью строки запроса:

<link href="mystyle.css?SOME_UNIQUE_TEXT" type="text/css" rel="stylesheet" />

Я помню, что использовал этот метод несколько лет назад для принуждения перезагрузки изображения веб-камеры, но время, вероятно, шло дальше...

20
ответ дан 5 December 2019 в 06:11
поделиться

Не используя js, можно просто сохранить имя файла CSS в переменной сеанса. Когда запрос выполнен к Основной Странице, Вы просто составляете тег link CSS с именем переменной сеанса.

Будучи ccs отличающимся именем файла, Вы вынуждаете broswer загрузить его, не будучи должен проверить то, что было ранее загружено в браузере.

4
ответ дан 5 December 2019 в 06:11
поделиться

Поскольку jeroen предположил, что у Вас может быть что-то как:

<link href="StyleSelector.aspx?foo=bar&baz=foz" type="text/css" rel="stylesheet" />

Затем Ваш файл StyleSelector.aspx должен быть чем-то вроде этого:

<%@ Page Language="cs" AutoEventWireup="false" Inherits="Demo.StyleSelector" Codebehind="StyleSelector.aspx.cs" %>

И Ваш StyleSelector.aspx.cs как это:

using System.IO;

namespace Demo
{
    public partial class StyleSelector : System.Web.UI.Page
    {
        public StyleSelector()
        {
            Me.Load += New EventHandler(doLoad);
        }

        protected void doLoad(object sender, System.EventArgs e)
        {
            // Make sure you add this line
            Response.ContentType = "text/css";

            string cssFileName = Request.QueryString("foo");

            // I'm assuming you have your CSS in a css/ folder
            Response.WriteFile("css/" + cssFileName + ".css");
        }
    }
}

Это отправило бы пользователю содержание файла CSS (на самом деле любой файл, см. примечание по безопасности:) на основе аргументов строки запроса. Теперь хитрая часть делает, Условное выражение ДОБИРАЮТСЯ, который является необычным названием проверки, если у пользователя есть страница в кэше или нет.

В первую очередь, я настоятельно рекомендую, чтобы Вы читающий Условное выражение HTTP ДОБРАЛИСЬ для хакеров RSS, большая статья, которая объясняет, основы Условного выражения HTTP ПОЛУЧАЮТ механизм. Это - необходимость чтение, верьте мне.

Я отправил подобный ответ (но с кодом PHP, извините) к, ТАКИМ ОБРАЗОМ, вопрос может я использовать “http заголовок”, чтобы проверить, была ли динамическая страница изменена. Должно быть легко портировать код от PHP до C# (я сделаю это, если позже у меня будет время.)

Примечание по безопасности:: это - очень небезопасное выполнение чего-то как ("CSS /" + cssFileName + ".css"), поскольку можно отправить строку относительного пути, и таким образом можно отправить пользователю содержание другого файла. Необходимо придумать лучший способ узнать что файл CSS отправить.

Примечание дизайна: вместо .aspx страницы Вы могли бы хотеть использовать IHttpModule или IHttpHandler, но этот путь работает просто великолепно.

2
ответ дан 5 December 2019 в 06:11
поделиться

Необходимо возможно просто совместно использовать класс общего предка, затем можно щелкнуть им с единственной командой js в случае необходимости.

<body class="style2">

<body class="style1">

и т.д.

0
ответ дан 5 December 2019 в 06:11
поделиться

Ответ для вопроса 1

Вы могли записать Управление сервером, наследовавшееся Системе. Сеть. UI.Control переопределение Метода рендеринга:

public class CSSLink : System.Web.UI.Control
{

    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {

        if ( ... querystring params == ... )
            writer.WriteLine("<link href=\"/styles/css1.css\" type=\"text/css\" rel=\"stylesheet\" />")
        else
            writer.WriteLine("<link href=\"/styles/css2.css\" type=\"text/css\" rel=\"stylesheet\" />")

    }

}

и вставьте экземпляр этого класса в Вашем MasterPage:

<%@ Register TagPrefix="mycontrols" Namespace="MyNamespace" Assembly="MyAssembly" %>
...
<head runat="server">
    ...
    <mycontrols:CSSLink id="masterCSSLink" runat="server" />
</head>
...
1
ответ дан 5 December 2019 в 06:11
поделиться

Я знаю, что вопрос был конкретно о C#, и я принимаю от того Windows Server некоторого аромата. Так как я не знаю ни одну из тех технологий хорошо, я дам ответ, это будет работать в PHP и Apache, и можно получить что-то от него.

Как предложено ранее, просто установите идентификатор или класс на теле страницы, зависящей от определенного запроса, например, (в PHP)

<?php
if($_GET['admin_page']) {
  $body_id = 'admin';
} else {
  $body_id = 'normal';
}
?>
...
<body id="<?php echo $body_id; ?>">
...
</body>

И Ваш CSS может предназначаться для этого:

body#admin h1 {
   color: red;
}

body#normal h1 {
   color: blue;
}

и т.д.

Что касается принуждения загрузки CSS, Вы могли сделать это в Apache с mod_expires или mod_headers модулями - для mod_headers, это в .htaccess остановит кэшируемые файлы CSS:

<FilesMatch "\.(css)$">
Header set Cache-Control "max-age=0, private, no-store, no-cache, must-revalidate"
</FilesMatch>

Но так как Вы, вероятно, не используете апача, который не поможет Вам очень :(

0
ответ дан 5 December 2019 в 06:11
поделиться

Мне нравится предложение Джероена добавить строку запроса к URL таблицы стилей. Можно добавить метку времени, когда файл таблицы стилей был изменен в последний раз. Мне кажется, это хороший кандидат для вспомогательной функции или пользовательского элемента управления, который будет генерировать тег LINK для вас.

0
ответ дан 5 December 2019 в 06:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: