Почему некоторые веб-сайты получают доступ к определенным версиям CSS, или использование файла JavaScript ПОЛУЧАЮТ параметры?

Я видел довольно много веб-сайтов, делающих, это (даже stackoverflow само) в их сгенерированном источнике HTML, получая доступ к определенной версии CSS или файла JavaScript с ПОЛУЧАЕТ параметры. Какой смысл его?

Пример:

<link rel="stylesheet" href="http://sstatic.net/so/all.css?v=6230">
<script type="text/javascript" 
        src="http://sstatic.net/so/js/master.js?v=6180"></script>

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

6
задан Sinan Ünür 5 February 2010 в 01:59
поделиться

4 ответа

Неужели клиенты со старыми кэшированными версиями в своих браузерах просто вынуждены обновлять свою устаревшую версию?

Именно так.

Прочтите этот вопрос , чтобы узнать подробности, дополнительные ссылки и обсуждение, и этот вопрос о том, как сам Stack Overflow использует этот метод.

4
ответ дан 17 December 2019 в 04:46
поделиться

Да, это для разрыва кешей браузера и прокси. Другой цели нет.

Ну, теоретически вы можете динамически генерировать javascript, и тогда вам понадобятся эти параметры. Так, например, работает JSONP. Но в основном это для недействительных кешей.

1
ответ дан 17 December 2019 в 04:46
поделиться

Из исходного кода Boost:

inline bool is_directory( file_status f ) { return f.type() == directory_file; }
inline bool exists( file_status f )       { return f.type() != status_unknown && f.type() != file_not_found; }

Как видно, если is _ directory возвращает значение true, то exists также должен возвращать значение true. Возможно, проблема в другом месте вашего кода - пожалуйста, разместите минимальный компилируемый пример, который показывает проблему.

Можно также попробовать использовать один и тот же объект file _ status для обоих вызовов, чтобы узнать, изменяется ли выходной объект status .

-121--2160939-

Возможно, потребуется просмотреть функцию api AccessibleObjectObjectWindow , определенную в файле Oleacc.dll. Эндрю Уайтчепел имеет несколько статей о том, как его использовать. На основании его статей я написал ответ на очень похожий вопрос (о Excel, а не Word), который вы можете найти здесь:

Как использовать позднюю привязку для получения экземпляра Excel?

Там вы найдете пример, как подключиться к уже запущенному экземпляру Excel и затем автоматизировать этот экземпляр, используя позднюю привязку.

Обновление:

Вот краткий образец, адаптированный к Word:

using System;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;

namespace WordLateBindingSample
{
    [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("00020400-0000-0000-C000-000000000046")]
    public interface IDispatch
    {
    }

    class Program
    {
        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("Oleacc.dll")]
        static extern int AccessibleObjectFromWindow(int hwnd, uint dwObjectID, byte[] riid, out IDispatch ptr);

        public delegate bool EnumChildCallback(int hwnd, ref int lParam);

        [DllImport("User32.dll")]
        public static extern bool EnumChildWindows(int hWndParent, EnumChildCallback lpEnumFunc, ref int lParam);

        [DllImport("User32.dll")]
        public static extern int GetClassName(int hWnd, StringBuilder lpClassName, int nMaxCount);

        public static bool EnumChildProc(int hwndChild, ref int lParam)
        {
            StringBuilder buf = new StringBuilder(128);
            GetClassName(hwndChild, buf, 128);
            if (buf.ToString() == "_WwG")
            {
                lParam = hwndChild;
                return false;
            }
            return true;
        }

        static void Main(string[] args)
        {
            // Use the window class name ("OpusApp") to retrieve a handle to Word's main window.
            // Alternatively you can get the window handle via the process id:
            // int hwnd = (int)Process.GetProcessById(wordPid).MainWindowHandle;
            //
            int hwnd = (int)FindWindow("OpusApp", null);

            if (hwnd != 0)
            {
                int hwndChild = 0;

                // Search the accessible child window (it has class name "_WwG") 
                // as described in http://msdn.microsoft.com/en-us/library/dd317978%28VS.85%29.aspx
                //
                EnumChildCallback cb = new EnumChildCallback(EnumChildProc);
                EnumChildWindows(hwnd, cb, ref hwndChild);

                if (hwndChild != 0)
                {
                    // We call AccessibleObjectFromWindow, passing the constant OBJID_NATIVEOM (defined in winuser.h) 
                    // and IID_IDispatch - we want an IDispatch pointer into the native object model.
                    //
                    const uint OBJID_NATIVEOM = 0xFFFFFFF0;
                    Guid IID_IDispatch = new Guid("{00020400-0000-0000-C000-000000000046}");
                    IDispatch ptr;

                    int hr = AccessibleObjectFromWindow(hwndChild, OBJID_NATIVEOM, IID_IDispatch.ToByteArray(), out ptr);

                    if (hr >= 0)
                    {
                        object wordApp = ptr.GetType().InvokeMember("Application", BindingFlags.GetProperty, null, ptr, null);

                        object version = wordApp.GetType().InvokeMember("Version", BindingFlags.GetField | BindingFlags.InvokeMethod | BindingFlags.GetProperty, null, wordApp, null);
                        Console.WriteLine(string.Format("Word version is: {0}", version));
                    }
                }
            }
        }
    }
}
-121--4605370-

Это заставит браузер получить новую версию, а не просто использовать кэшированную, более старую версию. Именно.

0
ответ дан 17 December 2019 в 04:46
поделиться

Необходимо заставить браузер получить новую версию, а не просто использовать более старую, кэшированную версию. Именно.

-121--4435170-

У нас также есть тонна таблиц в нашей системе. То, что мы сделали, это нормализовали базу данных до хорошей точки, затем создали несколько представлений, которые охватывают наиболее распространенные потребности использования таблиц в нашей системе. Что-то подобное может помочь и тебе.

-121--2643506-

Используется с более длительным сроком действия для CSS/Javascript. Это позволяет сайту указывать браузеру на возможность кэширования данных в течение очень длительного времени (например, 5 лет). При обновлении css или js номер версии изменится, что приведет к промаху кэша.

Браузеры кэшируют css/js по полной последовательности запроса.

0
ответ дан 17 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

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