2012-04-06 22 views
3

Ich möchte den Dateinamen des Skripts in globalen Funktionen abrufen.So erhalten Sie den Dateinamen des Skripts in V8

Ich versuchte folgenden Code, aber Dateiname.IsEmpty() gibt True zurück.

using namespace v8; 

HandleScope handle_scope; 

// Define Global Function 'func' 
Handle<ObjectTemplate> global = ObjectTemplate::New(); 

auto func_name = v8::String::New("func"); 
auto func = v8::FunctionTemplate::New(
     [](const v8::Arguments& args) -> v8::Handle<v8::Value>{ 

      // I want to get Filename here. 
      auto filename = args.Callee()->GetScriptOrigin().ResourceName(); 
      std::cout << filename.IsEmpty() << std::endl; 

      return v8::Undefined(); 
     }); 

global->Set(func_name, func); 

auto context = Context::New(nullptr, global); 
Context::Scope context_scope(context); 

auto source = String::New("func()"); 

// Set Filename 
auto filename = String::New("abc.js"); 
auto script = v8::Script::Compile(source, filename); 
script->Run(); 

context.Dispose(); 

Gibt es eine korrekte Möglichkeit, auf den Ursprungsnamen des Skripts zuzugreifen?

+1

ich das von mir gelöst, aber ich kann die Antwort jetzt nicht schreiben, weil der Ruf. Ich poste später. – h2so5

Antwort

3

von mir gelöst:

auto func = v8::FunctionTemplate::New(
    [](const v8::Arguments& args) -> v8::Handle<v8::Value>{ 

      // Get Filename 
      auto filename = v8::StackTrace::CurrentStackTrace(1,v8::StackTrace::kScriptName) 
           ->GetFrame(0)->GetScriptName(); 
      std::cout << *v8::String::AsciiValue(filename) << std::endl; 

     return v8::Undefined(); 
    }); 
Verwandte Themen