Я видел довольно много веб-сайтов, делающих, это (даже 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>
Это - просто способ когерентности или лучшей практики? Это просто так, чтобы клиенты со старыми кэшированными версиями на их браузерах были вынуждены обновить свою устаревшую версию?
Неужели клиенты со старыми кэшированными версиями в своих браузерах просто вынуждены обновлять свою устаревшую версию?
Именно так.
Прочтите этот вопрос , чтобы узнать подробности, дополнительные ссылки и обсуждение, и этот вопрос о том, как сам Stack Overflow использует этот метод.
Да, это для разрыва кешей браузера и прокси. Другой цели нет.
Ну, теоретически вы можете динамически генерировать javascript, и тогда вам понадобятся эти параметры. Так, например, работает JSONP. Но в основном это для недействительных кешей.
Из исходного кода 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
.
Возможно, потребуется просмотреть функцию 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- Это заставит браузер получить новую версию, а не просто использовать кэшированную, более старую версию. Именно.
Необходимо заставить браузер получить новую версию, а не просто использовать более старую, кэшированную версию. Именно.
-121--4435170-У нас также есть тонна таблиц в нашей системе. То, что мы сделали, это нормализовали базу данных до хорошей точки, затем создали несколько представлений, которые охватывают наиболее распространенные потребности использования таблиц в нашей системе. Что-то подобное может помочь и тебе.
-121--2643506-Используется с более длительным сроком действия для CSS/Javascript. Это позволяет сайту указывать браузеру на возможность кэширования данных в течение очень длительного времени (например, 5 лет). При обновлении css или js номер версии изменится, что приведет к промаху кэша.
Браузеры кэшируют css/js по полной последовательности запроса.