2016-06-21 72 views
2

我想在我的ReactNative Windows項目中訪問Windows命名空間和特定工具,如js中的「Windows.Storage」。 據我所知,「Windows」上下文沒有傳遞給js bundle(這很奇怪),但應該可以改變它。如何將「Windows」加載到ReactNative Windows上的Chakra命名空間?

從理論上講,我應該可以在項目中做到這樣的JsProjectWinRTNamespace(L"Windows.Storage");。 如果是ReactNative,它應該是Native.JsProjectWinRTNamespace(L"Windows.Storage");。 但我不明白這條線應該放在哪裏。

任何幫助,將不勝感激。 謝謝。

回答

0

好吧,似乎我找到了這個。 你應該能夠通過添加Native.JsProjectWinRTNamespace(L"Windows.Storage");線,它react-native-windows/ReactWindows/ReactNative/Chakra/Executor/ChakraJavaScriptExecutor.cs編輯InitializeChakra()功能,所以它會看起來如下:

private void InitializeChakra() 
    { 
     JavaScriptContext.Current = _runtime.CreateContext(); 

     var consolePropertyId = default(JavaScriptPropertyId); 
     Native.ThrowIfError(
      Native.JsGetPropertyIdFromName("console", out consolePropertyId)); 

     Native.JsProjectWinRTNamespace(L"Windows.Storage"); 

     var consoleObject = JavaScriptValue.CreateObject(); 
     EnsureGlobalObject().SetProperty(consolePropertyId, consoleObject, true); 

     _consoleInfo = ConsoleInfo; 
     _consoleLog = ConsoleLog; 
     _consoleWarn = ConsoleWarn; 
     _consoleError = ConsoleError; 

     DefineHostCallback(consoleObject, "info", _consoleInfo); 
     DefineHostCallback(consoleObject, "log", _consoleLog); 
     DefineHostCallback(consoleObject, "warn", _consoleWarn); 
     DefineHostCallback(consoleObject, "error", _consoleError); 

     Debug.WriteLine("Chakra initialization successful."); 
    } 

現在,你就可以直接從ReactNative JS使用Windows API代碼例如:

var path = Windows.Storage.ApplicationData.current.localFolder.path;

!!!但要小心,因爲此名稱空間僅在Chakra運行時中可用,所以在使用Chrome調試應用程序時,會不斷出現'Windows is undefined'錯誤。

相關問題