[英]Dynamic setting of Google Maps Api Key for GMLib component
過去,這是有關為gmlib組件設置Google Maps Api Key的問題。 提供的解決方案是更改'map.html'頭元素,然后重新編譯資源(rc.cmd)並重新編譯組件。 這是一個非常靜態的解決方案,有時在運行時動態設置api密鑰會更方便,例如,當某人想為不同的項目使用不同的密鑰時(api密鑰可以存儲在項目的ini / property文件中)。 我認為最好的方法是GMMap組件的屬性和構造函數的新參數。 我在google maps javascript api中搜索了一些功能,例如更改/設置api鍵,但沒有找到任何功能。 看來api鍵必須“硬編碼”到html文件的head標簽中,並且沒有JavaScript函數可以對其進行更改。 (如果存在某些javascript函數,則ExecuteScript會調用它。)
任何想法如何在運行時設置api密鑰?
例如,我發現此鏈接可以更改文檔本身:是否可以通過JavaScript動態更改/設置Google Maps API密鑰?
如何在gmlib中利用它?
提前致謝。
確實,此解決方案對於GMLib來說不是必需的,因為當您(他的組件)從資源文件加載HTML映射時,可以在加載到TWebBrowser之前通過代碼更改此行(可以添加鍵)。
您需要在TGMMap中添加鍵屬性,並在GetBaseHTMLCode方法中考慮此屬性。
為了輕松更改此鍵,您可以從HTML代碼更改此行
<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false&libraries=weather,panoramio,geometry,drawing"></script>
被這個
<script type="text/javascript" src="https://maps.google.com/maps/api/js?%ssensor=false&libraries=weather,panoramio,geometry,drawing"></script>
並為此更改GetBaseHTMLCode方法
function TCustomGMMap.GetBaseHTMLCode: string;
var
List: TStringList;
Stream: TResourceStream;
begin
Result := '';
List := TStringList.Create;
try
try
Stream := TResourceStream.Create(HInstance, RES_MAPA_CODE, RT_RCDATA);
List.LoadFromStream(Stream);
Result := List.Text;
Result := Format(Result, [KeyProerty]); // <== add this line
finally
if Assigned(Stream) then FreeAndNil(Stream);
if Assigned(List) then FreeAndNil(List);
end;
except
raise Exception.Create(GetTranslateText('No se ha podido cargar el recurso', Language));
end;
end;
此更改尚未測試,但這是想法:-)
我將其放入本周的待辦事項列表中;-)
問候
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.