Eu tenho um AppleScript que cria um novo documento do Safari e abre vários URLs nessa janela usando um loop de repetição. Gostaria que o script continuasse usando a mesma janela, mesmo que não seja a janela mais à frente.
(O problema é que, se um usuário mudar o foco para outra janela do Safari, esse script abrirá as URLs na janela mais à frente, em vez da janela criada anteriormente.)
Gostaria de resolver esse problema usando o window id
se possível, mas preciso de ajuda no script.
Para esse fim, criei o seguinte, mas, novamente, acho que pode haver um problema. Prefiro não obter o id usando front window
, pois um usuário pode alterar a janela frontal em um momento inoportuno e o script puxaria o ID da janela errado.
tell application "Safari"
make new document -- after this what if user changes focus
set win_ID to id of front window of application "Safari"
end tell
Eu prefiro usar algo como
set win_ID to window id of (make new document)
Mesmo usando o acima, não consegui abrir URLs em uma janela usando seu id de janela e preciso de ajuda com esse script também.
Funcionaria mais ou menos assim:
tell application "Safari"
open location "https://apple.com" in a new tab in window id xxxx
end tell
Atualização para abordar as preocupações do uso de:
front window
O exemplo de código AppleScript a seguir garante que a lista de URL s seja aberta na janela de destino , independentemente de sua posição na ordem z das janelas .
Observação: role conforme necessário para ver todo o código .
Notas:
O código AppleScript de exemplo atualizado inclui algum tratamento de erros , pois se o arquivo tmp (valor da variável ) não for criado, o script será interrompido sem nenhuma mensagem. Isso pode ser alterado convertendo a instrução em um bloco completo e incluindo um , ou comando apropriado , conforme desejado, seguido pelo comando .
tmpFileName
if not my writeToFile ...
if
display alert
display dialog
display notification
return
Conforme codificado, isso
--> document "Untitled"
retorna domake new document
irrelevante, porque com orepeat
loop incluído ele espera até que o arquivo HTML seja carregado e pode ser consultado pelo nome real do documento conforme definido pelas tags no documento e garante que a ordem z seja irrelevante.<title>" & windowName & "</title>
O
repeat
loop conforme codificado é escrito para esperar até 3 segundos para o arquivo HTML carregar e deve ser mais do que tempo suficiente. Ajuste se necessário.Optei por abrir mão do uso do
do shell script
comando conforme utilizado em sua resposta, porém, se preferir utilizá-lo, então:Substituir:
Com:
Em seguida, remova o
on writeToFile(theData, theFile, overwriteExistingContent)
manipulador da-- # Handler #
seção do código .Além disso, se você preferir um
do shell script
comando para remover o arquivo tmp , o valor datmpFileName
variável , então:Substituir:
Com:
Resposta original
O exemplo de código AppleScript a seguir é um exemplo de como abrir uma lista de URLs na mesma janela do Safari , independentemente da ordem das janelas .
Notas:
open location
, pois faz parte do Standard Additions , não do Safari . Use aURL
propriedade para definir a URL do documento ou guia .list
dos URLs e o índice do item da lista ( URL ) na lista .make new document
, o novo documento torna-se ofront window
do Safari . Obtenha owindow id
dofront window
imediatamente após omake new document
comando .repeat
loop em2
e use owindow id
que foi determinado diretamente após a execução domake new document
comando .@ user3439894 Aceitei sua resposta - ela responde bem à pergunta. Existe outra maneira - uma maneira hackie de criar um ID para uma janela do Safari.
Isso permite que os seguintes comandos evitem o uso de "janela frontal" caso a janela que foi criada não esteja mais na frente quando o restante dos comandos começar - duvidoso, mas possível.
Não tenho certeza se existe uma maneira de dar a uma nova janela algo diferente de "Sem título" como um nome ao criar a janela.
Respostas: