Вызывание функции JavaScript от Silverlight

РЕДАКТИРОВАТЬ Изменен код в списке PID.

Редактировать 2 Изменен код для вывода уровня как %errorlevel%

См. https://docs.microsoft.com/en-us/windows/console/getconsoleprocesslist

CountConsoleProcess.vb

imports System.Runtime.InteropServices 
Public Module MyApplication  

Public Declare Function GetConsoleProcessList Lib "Kernel32" (ByRef ProcessList as Integer, ByVal Count as Integer) As Integer

Public Sub Main ()
                Dim ProcessList(0 To 9) As Integer
                Dim Count As Integer
                Dim Ret As Integer
                Dim x as Integer
                Dim ColItems as Object
                Dim objWMIService As Object
                objWMIService = GetObject("winmgmts:\\.\root\cimv2")
                Count = 10
                'subtract one to account for this program
                Ret = GetConsoleProcessList(ProcessList(0), 10) - 1
                Console.Writeline("Level = " & Ret)

                For x = Ret  to 1 step -1
                    colItems = objWMIService.ExecQuery("Select * From Win32_Process where ProcessID=" & ProcessList(x))
                    For Each objItem in colItems
                        Console.writeline("PID : " & objItem.ProcessID & "  Command line : " &  objItem.CommandLine)
                    Next
                Next
                Environment.ExitCode = Ret  
End Sub
End Module 

CountConsoleProcess.bat

C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc "%~dp0\CountConsoleProcess.vb" /debug:full /out:"%~dp0\CountConsoleProcess.exe" /target:exe 
pause

ConsoleTest. Bat

REM Showing error level
"C:\Users\User\Desktop\ConsoleTest.bat"
Echo %errorlevel%
pause

И использовать (после выполнения cmd /k, так что они работают два CMD). Первый - это текущий PID.

Microsoft Windows [Version 10.0.10240]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\Windows\system32>cmd /k echo hello world
hello world

C:\Windows\system32>"C:\Users\User\Desktop\ConsoleTest.bat"

C:\Windows\system32>"C:\Users\User\Desktop\Console.exe"
Level = 2
PID : 6848  Command line : "C:\Windows\System32\cmd.exe"
PID : 7824  Command line : cmd  /k echo hello world

C:\Windows\system32>Echo 2
2    

C:\Windows\system32>

И добавить текущую папку в путь

_AddThisFolderToPath.bat

Setx path "%path%;%~dp0"
Pause

7
задан Ryan 10 February 2009 в 21:12
поделиться

5 ответов

Ага! Я понял это. Наше приложение использует iframe, таким образом, представленный HTML выглядит примерно так

<html>
<head></head>
<body>
Stuff
<iframe>
    <html>
        <head></head>
        <body>Other Stuff</body>
    </html>
</iframe>
<body>
</html>

И Silverlight управляет рассматриваемый, находится в iframe. Проблема состояла в том, что файл, который содержал showPopup на функцию сослались во внешнем <head> (почему я мог вызвать функцию с панелью инструментов IE), но не внутреннее <head>. Добавление ссылки на файл в in-iframe <head> решенный проблема.

Вид разочаровывающих, но спасибо за всю справку.

2
ответ дан 7 December 2019 в 10:08
поделиться

На самом деле ссылка на сценарий снова от iframe не является самым эффективным путем к коду ссылки, содержавшемуся в родителе. Если Ваша функция вызвана "showPopup", можно вставить это в iframe:

<script type="text/javascript">
    var showPopup = parent.showPopup;
</script>

И voilà. Объяснение этого состоит в том, что все "глобальные" функции и объекты являются частью этого "глобального пространства имен"..., которое является объектом "окна". Таким образом, при попытке получить доступ к "глобальным" функциям от ребенка, необходимо или вызвать функцию на родителе (например, parent.showPopup ('.... ')) или объявлять локальный псевдоним для него (который является тем, что мы выполняем в вышеупомянутом примере).

Удачи!

2
ответ дан 7 December 2019 в 10:08
поделиться

Удостоверьтесь, что Ваш сценарий полностью загружается прежде, чем попытаться вызвать функции от него.

0
ответ дан 7 December 2019 в 10:08
поделиться

Функция showPopup javascript на том же HTML или aspx странице как управление Silverlight? Вы будете обычно становиться "Неудавшимися для Вызова..." ошибки, если функция JavaScript не будет существовать:

HtmlPage.Window.Invoke("functionThatDoesNotExist", new [] { "Testing" });

alt text

Какой браузер Вы используете, когда Вы получаете эту проблему?

Вы используете последнюю версию Silverlight?

Вы используете ScriptableType attrbiute где-нибудь?

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

2
ответ дан 7 December 2019 в 10:08
поделиться

Вот как я это делаю. Но я создаю silverlight без визуальной студии. У меня только необработанные html, xaml и js (javascript). Обратите внимание на MouseLeftButtonUp и его значение «LandOnSpace»

        <Canvas x:Name="btnLandOnSpace" Background="LightGreen" MouseLeftButtonUp="LandOnSpace"
            Cursor="Hand" Canvas.Top ="0"  Width="70" Height="50"> 
            <TextBlock Text="LandOnSpace"  />
            </Canvas>

function LandOnSpace(sender, e) {  //on server
if (!ShipAnimateActive && !blnWaitingOnServer) {
    blnWaitingOnServer = true;
    RunServerFunction("/sqgame/getJSLLandOnSpace");
        ShowWaitingBox();
        };
else {
    alert('Waiting on server.');
};

}

0
ответ дан 7 December 2019 в 10:08
поделиться
Другие вопросы по тегам:

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