c執行js腳本
⑴ C#如何執行js腳本傳遞過來的function
微軟的程序員已經給我們寫了這樣一個操作script的com介面,那就是MS SCRIPT CONTROL
顧名思義,他能執行腳本語言,呵呵,確實,他能做到。
通過添加引用MS SCRIPT CONTROL 的com介面
然後創建對象
MSScriptControl.ScriptControlClass scc = new MSScriptControl.ScriptControlClass();
設定scc.Language = "javascript";
scc.Eval("var w=10;var t=2; p=w/t;");最後他返回p的值;
⑵ C# .net中 如何調用js腳本文件
很簡單,
比如你有個GetUserData()js函數,在asp.net內調用用
RegisterStarupScript("<script>GetUser();</script>")方法
後台使用
Page.RegisterStartupScript("aa","<script language=javascript>test();</script>");
的好處在於
編譯器是把腳本寫在生成html的body或form標簽之內的,會出現這樣的效果:
頁面內容顯示完畢 再運行腳本
===》區別於
Response.Write("<script language=javascript>test();</script>");
客戶端會先運行腳本,後決定是否顯示body內容
但是,如果aspx文件內沒有runat=server的Form ,則Page.RegisterStartupScript方法沒有任何影響,也即無效
⑶ VC++ 如何執行腳本
1. 導入庫 ,該指令一般加在 stdafx.h 中
#import "msscript.ocx" no_namespace
2. 創建腳本對象//腳本引擎IScriptControlPtr m_pScript;
m_pScript.CreateInstance(__uuidof(ScriptControl));
m_pScript-Timeout = 1000 * nTimeout;//超時設置
m_pScript-PutAllowUI( VARIANT_FALSE );
m_pScript-PutLanguage( _bstr_t(_T("JScript")) );
3. 讀取腳本文件
wstring js = read_file("c:/1.js");//read_file 函數此處略去
4. 增加代碼並執行//增加代碼m_pScript-AddCode( _bstr_t(js.c_str()));
//執行代碼(1.js 中有 main 函數)
m_pScript-(_bstr_t(_T("main()")));
至於腳本和VC的交互,可以通過創建 com 組件來實現,在 vc 工程中,增加一個 com 組件,比如 IVREngine,然後添加方法,在執行腳本前,把該對象增加到腳本引擎中,代碼如下://輔助對象CComPtr<IIVREnginepIVREngine;
pIVREngine.CoCreateInstance(__uuidof(IVREngine));
m_pScript-AddObject( _bstr_t("IVR"), pIVREngine, VARIANT_TRUE );
這時,在腳本(1.js)中,就可以直接調用 IIVREngine 提供的方法了,比如 IVR.PlayFile("c:/1.wav");注意已有相應的類CScriptObject
BOOL CScriptDemoApp::InitInstance(){// Initialize COM
⑷ 在C++中怎麼調用一個js中的方法
例如一個test.js內容如下:
function main( input )
{
return input;
}
在C++中調用方法如下:
// vcJscript.cpp : 定義控制台應用程序的入口點。
//
#include "stdafx.h"
#import "C:/windows/system32/msscript.ocx" // msscript.ocx
using namespace MSScriptControl;
#include <fstream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = CoInitialize(NULL);
IScriptControlPtr pScriptControl(__uuidof(ScriptControl));
pScriptControl->Language = "JavaScript";
//pScriptControl->AllowUI = TRUE;
fstream file;
file.open( "test.js" );
string strFileContent, strTemp;
char szTemp[1024]="";
do
{
file.read(szTemp, 1024);
strFileContent.append( szTemp );
memset( szTemp, 0, 1024 );
}
while ( !file.fail() );
file.close();
pScriptControl->AddCode(strFileContent.c_str());
VARIANT A = pScriptControl->Eval("main(4);");
int iRet = A.intVal;
return 0;
}
腳本控制項有四種方法。其中之一是 Run(),運行子常式或函數。在調用此方法之前,指定的腳本語言、 設置 AllowUI,並將下面的腳本添加到腳本控制項:
//---------------------- Begin ---------------------------
#include <stdio.h>
#import "C:/winnt/system32/msscript.ocx" // msscript.ocx
using namespace MSScriptControl;
int main(void)
{
HRESULT hr = CoInitialize(NULL);
IScriptControlPtr pScriptControl(__uuidof(ScriptControl));
// Create a VARIANT array of VARIANTs which hold BSTRs
LPSAFEARRAY psa;
SAFEARRAYBOUND rgsabound[] = { 3, 0 }; // 3 elements, 0-based
int i;
psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
if (!psa)
{
return E_OUTOFMEMORY;
}
VARIANT vFlavors[3];
for (i = 0; i < 3; i++)
{
VariantInit(&vFlavors[i]);
V_VT(&vFlavors[i]) = VT_BSTR;
}
V_BSTR(&vFlavors[0]) = SysAllocString(OLESTR("Vanilla"));
V_BSTR(&vFlavors[1]) = SysAllocString(OLESTR("Chocolate"));
V_BSTR(&vFlavors[2]) = SysAllocString(OLESTR("Espresso Chip"));
long lZero = 0;
long lOne = 1;
long lTwo = 2;
// Put Elements to the SafeArray:
hr = SafeArrayPutElement(psa, &lZero,&vFlavors[0]);
hr = SafeArrayPutElement(psa, &lOne,&vFlavors[1]);
hr = SafeArrayPutElement(psa, &lTwo,&vFlavors[2]);
// Free Elements from the SafeArray:
for(i=0;i<3;i++)
{
SysFreeString(vFlavors[i].bstrVal);
}
// Set up Script control properties
pScriptControl->Language = "JScript";
pScriptControl->AllowUI = TRUE;
pScriptControl->AddCode(
"function MyStringFunction(Argu1,Argu2,Argu3)/
{ return /"hi there/" ;}" );
// Call MyStringFunction with the two args:
_variant_t outpar = pScriptControl->Run("MyStringFunction", &psa);
// Convert VARIANT to C string:
_bstr_t bstrReturn = (_bstr_t)outpar;
char *pResult = (char *)bstrReturn;
// Print the result out:
printf("func=%s/n",pResult);
// Clean up:
SafeArrayDestroy(psa);
CoUninitialize();
return(0);
}
⑸ 在JSP c:for 循環中 用JS腳本怎麼獲得循環中一個div的id
可以c:forEach中將生成的div id寫到一個js的數組中,之後在頁面用js訪問這個數組即可
或者用生成的div的別的特徵來選到這個div再獲取他的id,比如class屬性。可以讓生成的div使用同已前綴或者後綴的來區分於其他div。
如果生成的div的id是可以在c:forEach中控制的,可以用例如myDiv_1,myDiv_2這樣的來定義,然後在頁面用JS按照約定直接getElementById("myDiv_" + i);獲取到。
⑹ 如何在C++中調用javascript中的函數
v8 是google 的js 開源引擎, 想實現這種功能, 建議直接在你工程裡面加v8吧, 然後直接用v8調這段 js代碼,
⑺ JS腳本怎麼運行
常見的執行js代碼都是放入到HTML引入後,然後通過HTML文件來執行胡查看代碼。顯然這是比較麻煩的事情,如果電腦裡面安裝了node.js,可以使用node來直接使用node來運行想要運行的js文件。
<html>
<body>
<script language="javascript">
function Card(owner,rate)
{
this.Owner=owner;
this.Rate=rate;
}
var mycard = new Card("X","150");
document.write("name:"+mycard.Owner+"speed:"+mycard.Rate);
</script>
</body>
</html>
(7)c執行js腳本擴展閱讀:
JavaScript語言中採用的是弱類型的變數類型,對使用的數據類型未做出嚴格的要求,是基於Java基本語句和控制的腳本語言,其設計簡單緊湊。
腳本簡單地說就是一條條的文字命令,這些文字命令是我們可以看到的(如可以用記事本打開查看、編輯),腳本程序在執行時,是由系統的一個解釋器,將其一條條的翻譯成機器可識別的指令,並按程序順序執行。因為腳本在執行時多了一道翻譯的過程,所以它比二進製程序執行效率要稍低一些。
⑻ c#怎麼調用js腳本
有三種方法,請自行選用
開源項目 Javascript .NET
地址:http://javascriptdotnet.codeplex.com/它是Google Chrome V8引擎在.NET上的封裝,功能完善,性能相對較高
使用Interop.MSScriptControl.dll 控制項。
MSScriptControl.ScriptControlClasssc=newMSScriptControl.ScriptControlClass();
sc.Language="javascript";
objectobj=sc.Eval("1+2*(3+4)");
Console.WriteLine(obj);
利用Microsoft.JScript.Vsa
添加Microsoft.JScript、Microsoft.Vsa二個程序集的引用
如滿意,請採納,謝謝。